如何解决如何使用部分数据克隆PostgreSQL数据库
我面临的任务是克隆PostgreSQL数据库,保留所有约束,索引等,并包括与特定列值相关的所有记录。
换句话说,它是一个独立的大型数据库,而不是多个小型数据库。
例如,我的原始数据库有很多模式,在每个模式中都有很多表,在每个表中都有关于多人的记录。我想将其克隆到新数据库,但仅克隆与具有id的特定人员相关的记录(克隆所有具有person_id = xxx的表中的所有记录)。
是否有用于此任务的工具或任何建议? (我熟悉Java和Python)
解决方法
我发现最好的方法是首先使用带有pg_dump
标志的-s
工具导出完整的模式(仅转储模式,而不转储数据),然后导出数据
要从新的空数据库开始加载模式,请使用pg_restore
。它将从pg_dump
中读取输出,并使用它来构建数据库。
导出数据时,您需要对每个表进行分类(您可以编写一个帮助脚本来简化此过程,或者使用excel等):
- 根据某种条件(例如
person_id
中的某个值)从中获取数据子集的表 - 您要完整复制的表(例如维度表,例如
calendar
和company_locations
) - 不需要任何数据的表
对于(1),您将需要编写一个适当的SELECT
查询,该查询返回要复制的数据子集。将这些查询放在脚本中,然后让每个查询将结果写入一个名为<schema>.<table>
的单独文件中。最后,使用psql
实用程序将数据加载到测试数据库。 psql
具有特殊的\copy
命令,可简化此操作。可以在这样的终端上使用它:
psql --c "\copy schema.table FROM ‘~/dump_data/schema.table’ WITH DELIMITER ‘,’ CSV;"
再次使用pg_dump
处理所有属于(2)的事件,使用-t <table name>
标志仅转储指定的表,并使用-a
仅转储数据(否模式)。也可以通过为(2)中的每个表添加一个不合格的SELECT *
并以相同的方式加载数据,来将其添加到(1)的脚本中。
属于(3)的表格已由初始导出处理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。