问题
在其他电脑上备份导出pg数据库后,在自己的电脑上还原发现少了很多表。我使用的是dbeaver备份和还原。但是在创建表的时候使用的navicat
在还原数据库的时候dbeaver打印出来的log
pg_restore: 鍒涘缓TABLE "public.student"
pg_restore: 鏉ヨ嚜 TOC 璁板綍 435; 1259 41348 TABLE student postgres
pg_restore: 閿欒: could not execute query: 闁挎瑨顕�: 閸忓磭閮� "public.student_id_seq" 娑撳秴鐡ㄩ崷锟�
绗�2琛� id bigint DEFAULT nextval('public.student...
^
Command was: CREATE TABLE public.student (
id bigint DEFAULT nextval('public.student_id_seq'::regclass) NOT NULL,
name character varying(255),
addr character varying(255),
age smallint
);
原因
通过log可以看到主键id的序列public.student_id_seq出现问题,导致表没有创建成功。
首先pgsql不像mysql一样能够自动设置主键自增,上面提到表是通过navicat创建的,在navicat中需要先创建一个序列再指定这个序列才可以。但是dbeaver如果想要设置列的主键自增需要设置列的类型为bigserial或serial,navicat没有这个类型。
以后创建表的时候还是使用pgadmin或dbeaver吧,navicat对pg的支持并不是太好
解决办法
既然问题已经出现,总要有个解决办法
-
通过log找到缺失表的序列名,然后到序列中去创建序列,最后导入即可
-
提前将所有的序列通过dll批量生成序列