使用种子数据重新填充Postgres数据库以进行测试

时间:2018-05-01 10:17:11

标签: postgresql testing database-restore

我正在尝试为我的应用创建一些集成测试, 部分原因我想每次为我的应用程序播种 测试运行。但是,数据库需要保持连接状态, 所以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

中组合了标记是否有问题

1 个答案:

答案 0 :(得分:0)

pg_restore可用于生成导出脚本,在这种情况下,可以使用某些标志,例如--cleandoc

  

此脚本输出相当于纯文本输出格式   pg_dump的。因此,控制输出的一些选项是   类似于pg_dump选项。

运行pg_restore以恢复数据库时,它只能应用脚本中存在的命令。

您需要使用pg_dump选项运行--clean,以便在还原数据库时应用此命令。