转储表并将其导入另一个postgres之后,db约束缺失。
我用它来转储:
pg_dump --host=local --username=user -W --encoding=UTF-8 -j 10 --file=dump_test --format=d -s --dbname=mydb -t addendum
要导入:
pg_restore -d myOtherdb --host=local -n public --username=user -W --exit-on-error --format=d -j 10 -t addendum dump_test/
我在toc.dat中看到的内容是这样的:
ADD CONSTRAINT pk_addendum PRIMARY KEY (addendum_id);
> ALTER TABLE ONLY public.addendum DROP CONSTRAINT pk_addendum;
这看起来像是在创建和破坏PK,但我不确定我的解释是否正确,因为文件是二进制文件。
编辑:我正在使用PostgreSQL 9.3
答案 0 :(得分:1)
注意:当指定-t时,pg_dump不会尝试转储所选表可能依赖的任何其他数据库对象。因此,无法保证特定表转储的结果可以自行成功还原到干净的数据库中。
你有一些公认的没有吸引力的选择:
pg_dump
进行文本处理,从那里获取约束DDL,请参阅步骤1. pg_dump
,并将其完全还原。答案 1 :(得分:0)
聚会晚了一点,但这可能会有所帮助。
如果您要从大型转储文件中还原单个表,并且无法通过pg_restore获取索引(-t不会执行索引和约束)
pg_restore db_dump_file.dump | awk '/table_name/{nr[NR]; nr[NR+1]}; NR in nr' > table_name_indexes_tmp.psql
您还需要在匹配索引和约束之后的下一行。每次比赛后,上面的awk命令都会获得第+1行。
此输出文件应包含您的索引(假设转储文件实际上包含它们以及数据)。然后,您可以将它们作为单个命令应用回还原的表中。
这不是一个完美的解决方案,但是比尝试手动重新创建它们更好。