我希望有一种完全基于命令行的解决方案来测试我的数据库,通过运行终端命令将其还原到一致的状态。
我是这样转储我的数据库的:
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终端。
pg_restore
的--clean
选项。 - user330315--clean
选项上是正确的。 - crazymykl--clean
标志,但是当我在转储后插入行,然后使用转储来恢复数据库时,这些行仍然存在。这不是我想要的效果。 - lollercoaster--clean
参数在导入数据之前会 删除 所有内容。那些行不能存在。 - user330315--clean
- 这个选项仅对纯文本格式有意义。对于存档格式,您可以在调用pg_restore时指定该选项。来自文档。 - winsent