pg_dump和pg_restore(DROP IF EXISTS)

时间:2014-03-09 20:43:25

标签: postgresql

我想要一个完全基于shell的解决方案来测试我的数据库,允许我通过运行终端命令将其恢复到一致状态。

我像这样转储我的数据库:

pg_dump -F c -b -f -i -h domain.edu -p 5432 -n myschema -U me mydatabase -W -f mydump.sql

然后我想恢复它:

pg_restore -h domain.edu -p 5432 -U me -d mydatabase -W mydump.sql

但它不起作用,因为我遇到了很多这样的错误:

pg_restore: [archiver (db)] could not execute query: ERROR:  constraint "settings_person_id_fkey" for relation "settings" already exists
    Command was: ALTER TABLE ONLY settings
    ADD CONSTRAINT settings_learner_id_fkey FOREIGN KEY (person_id) REFERENCES pe...

基本上只有很多东西需要在重新添加之前先删除(DROP TABLE <whatever> IF EXISTS,与类型相同等)。

我如何使用Postgres做到这一点?我不想使用psql控制台,只想使用linux终端。

2 个答案:

答案 0 :(得分:18)

如果要将数据库恢复到一致状态,我建议您在恢复转储之前删除并重新创建它:

dropdb -h domain.edu -U me mydatabase
createdb -h domain.edu -U me -T template0 mydatabase # adjust encoding/locale if necessary
pg_restore -h domain.edu -p 5432 -U me -d mydatabase -W mydump.sql

答案 1 :(得分:1)

您可以在pg_dump中使用--clean来首先放置对象。

  

pg_dump --clean

备份

pg_dump --clean -U用户数据库> database.sql

还原

psql -U用户-d数据库-f database.sql