如何保存Postgres DB整个状态并将其恢复为开发目的?

时间:2018-02-20 10:15:14

标签: postgresql

我经常在开发中探索不同的数据模型,而我有一个我应该保留的产品。

一旦我确定我想要的模型,我就必须进行迁移,以便我的生产设置成为现实。

不幸的是,虽然我可以轻松地提交我的数据模型定义和迁移,探索,然后根据需要重新设置它,我不知道如何用postgres做到这一点。

我需要说的是"我当前的架构,表格,功能,触发器和数据当前处于我想要保存的状态"。然后探索它,摧毁它,改变它。然后回去保存它的方式。

是否有某种"保存检查点"和#34;恢复检查点"对于整个数据库?

我知道我至少可以使用3个概念:转储,复制数据文件和使用PITR,但我不知道如何有效地使用它们以达到简单和简单的目的。 git checkout。

使用pgdumps会让我把所有东西都提交给git,这不是我想要的。或者手动搁置一边。并在自定义脚本中编写所有过程。并等待转储/加载。它远不是一个git checkout便利。

复制数据文件需要重新启动数据库并占用数据空间的两倍。

使用PITR似乎非常复杂。

2 个答案:

答案 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数据库的任何连接。