我正在尝试为我的应用创建一些集成测试,
部分原因我想每次为我的应用程序播种
测试运行。但是,数据库需要保持连接状态,
所以dropdb
/ createdb
不是一种选择。
我目前正在做:
pg_dump -F custom -O -x -d test-db > ./tests/test-db
在测试之前,并且:
pg_restore --clean -d test-db ./tests/test-db
在每次测试运行后恢复数据库。
这似乎不起作用,因为pg_restore
命令会引发许多错误:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 3771; 2618 175960 RULE skilled_outcome_group _RETURN dan
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop rule _RETURN on view public.skilled_outcome_group because view public.skilled_outcome_group requires it
pg_restore: [archiver (db)] Error from TOC entry 184; 1259 174070 TABLE outcome_group_skill dan
pg_restore: [archiver (db)] could not execute query: ERROR: cannot drop table public.outcome_group_skill because other objects depend on it
它继续这样......我认为--clean
意味着完全抛弃一切,
但是pg_restore
抱怨它不能删除表/视图?我在pg_dump
/ pg_restore
?
答案 0 :(得分:0)
pg_restore
可用于生成导出脚本,在这种情况下,可以使用某些标志,例如--clean
。 doc说
此脚本输出相当于纯文本输出格式 pg_dump的。因此,控制输出的一些选项是 类似于pg_dump选项。
运行pg_restore
以恢复数据库时,它只能应用脚本中存在的命令。
您需要使用pg_dump
选项运行--clean
,以便在还原数据库时应用此命令。