我经常在开发中探索不同的数据模型,而我有一个我应该保留的产品。
一旦我确定我想要的模型,我就必须进行迁移,以便我的生产设置成为现实。
不幸的是,虽然我可以轻松地提交我的数据模型定义和迁移,探索,然后根据需要重新设置它,我不知道如何用postgres做到这一点。
我需要说的是"我当前的架构,表格,功能,触发器和数据当前处于我想要保存的状态"。然后探索它,摧毁它,改变它。然后回去保存它的方式。
是否有某种"保存检查点"和#34;恢复检查点"对于整个数据库?
我知道我至少可以使用3个概念:转储,复制数据文件和使用PITR,但我不知道如何有效地使用它们以达到简单和简单的目的。 git checkout。
使用pgdumps会让我把所有东西都提交给git,这不是我想要的。或者手动搁置一边。并在自定义脚本中编写所有过程。并等待转储/加载。它远不是一个git checkout便利。
复制数据文件需要重新启动数据库并占用数据空间的两倍。
使用PITR似乎非常复杂。
答案 0 :(得分:1)
您是否考虑过使用像pg_dump这样的东西? (https://www.postgresql.org/docs/current/static/backup-dump.html)
您可以创建一个bash脚本来转储数据库,然后在完成实验后再读回来(参见第一个链接,另外参考psql:https://www.postgresql.org/docs/current/static/app-psql.html)
答案 1 :(得分:1)
如果您想重置数据库用于测试目的,并且您确实拥有适当的架构迁移系统,则可以使用Postgres'模板系统。
创建一个通过模式迁移维护的数据库,并反映当前状态"。
如果要对其进行测试,请使用"参考"创建一个新数据库。数据库作为模板。请注意,模板也可以包含数据。
然后针对该新数据库运行测试。要重置它,请删除数据库并从模板重新创建它,例如:
create database base_template .... ;
现在使用您需要的所有内容(表格,视图,函数,数据......)填充base_template
然后创建一个测试数据库:
create database integration_test template = base_template ...;
针对integration_test
数据库运行测试。要重置它,只需删除并重新创建它:
drop database integration_test;
create database integration_test template = base_template ...;
您只需要小心,您要对base_template
数据库运行架构迁移。
唯一的缺点是,在创建克隆时,您无法激活base_template
数据库的任何连接。