Postgresql pg_转储和pg_恢复(如果存在,则删除)

Postgresql pg_转储和pg_恢复(如果存在,则删除),postgresql,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 但它不起作用,因为我会遇到

我想要一个完全基于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...
基本上,在重新添加之前,只需要先删除一堆内容(
删除表(如果存在),与类型相同,等等)


我怎样才能对博士后做到这一点?我不想使用
psql
控制台,只想使用linux终端

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

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
您可以在pg_dump中使用--clean来首先放置对象

垃圾场——清洁

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

恢复
psql-U user-d database-f database.sql

控制台和linux终端有什么区别?你想要
--clean
选项,用于
pg\u restore
@a\u horse\u,没有名字,我想他们指的是psql控制台。您使用的
--clean
开关是正确的。@一匹没有名字的马@crazymykl,不,这可不行。我添加了
--clean
标志,但是当我在转储之后插入行,然后使用转储恢复数据库时,这些行仍然存在。这不是我想要的效果。你的剧本一定有问题<代码>--clean
在导入转储之前删除所有内容。这些行不可能在那里。正确,我正在还原到错误的架构。