对于Postgresql,导出、导入一般用自带的pg_dump和pg_restore或psql. 若要第三方非特制的工具导出,再导入,或者手工写sql,除了注意触发器和约束等其他数据库必须注意的通常问题外,还要考虑pg中serial问题:
比如一张表,
create table test (
t_int serial primary key,
t_c char(2));
假设serial当前值为2,
当插入一个不指明serial的语句 insert into test (t_c) values ('aaa');
比如:insert into test (t_int,t_c) values (4,'aaaa'); serial当前值并不会这条语句的插入而改变,还停留在上个当前值3。
所以用第三方非特定工具备份带有serial字段的表,必须将serial的当前值备份出来,即加上一条语句:
SELECT pg_catalog.setval('xxxx_seq',xxxx,false);
或者
select pg_catalog.setval('xxxx_seq',(selectxxx_id from xxx order by xxx_id desc limit 1),false);
否则恢复的时候,数据是不完整的。