在生产中,我们的数据库只有几百GB大小.对于开发和测试,我们需要创建这个数据库的快照,这些快照在功能上是等效的,但大小只有10或20千兆.

挑战在于,我们业务实体的数据分散在许多表中.我们希望创建某种经过过滤的快照,以便转储中只包含some个实体.这样,我们可以每月左右获得新的快照,用于开发和测试.

例如,假设我们有一些实体具有这些多对多关系:

  • 该公司有N个部门
  • 该部门有N名员工
  • 员工有N份考勤记录

大约有and all of its constituent divisions, employees, and attendance records0家公司、2500个部门、17.5万名员工和数千万的考勤记录.我们想要一种可复制的方式来吸引,比如说,前and all of its constituent divisions, employees, and attendance records家公司.

我们目前对模式使用pg_dump,然后使用--disable triggers and--data运行pg_dump,以便从较小的表中获取所有数据.我们不希望必须编写定制脚本来提取部分数据,因为我们有一个快速的开发周期,并且担心定制脚本会很脆弱,可能会过时.

我们该怎么做?是否有第三方工具可以帮助从数据库中拉出逻辑分区?这些工具叫什么?

任何一般性的建议也将不胜感激!

推荐答案

在较大的表上,可以使用COPY命令拉出子集...

COPY (SELECT * FROM mytable WHERE ...) TO '/tmp/myfile.tsv'

COPY mytable FROM 'myfile.tsv'

https://www.postgresql.org/docs/current/static/sql-copy.html

您应该考虑维护一组开发数据,而不是仅仅 pull 生产的一个子集.在编写单元测试的情况下,可以使用测试所需的相同数据,try 访问所有可能的用例.

Postgresql相关问答推荐

PostgreSQL权限如何工作?需要从表格中 Select 收件箱

分区可以用于postgres中的同类查询吗?

Postgres BULK INSERT如何影响Debezium?

执行准备好的语句不返回数据

使用 pgx 扫描范围类型

Postgres >= 和 <= 具有特殊字符的行为

如何在 PostgreSQL 的回归测试中测试 TYPE 发送和接收函数

Postgres 根据自己的估计 Select 一个更费时的查询计划

PostgreSQL 输入结束时的语法错误

Rails:安装 pg gem 时出错

表或列名不能以数字开头?

如何让 Rails 使用 SSL 连接到 PostgreSQL?

Rails 3:在 Postgres 支持的 ActiveRecord 中使用 json 作为列类型时出现迁移错误

如何判断每个组中是否存在值

错误:must be owner of language plpgsql

将数据从 MS SQL 迁移到 PostgreSQL?

在 MAC OS X 10.6 for PostgreSQL 上设置 SHMMAX 等值

使用 Postgresql 在过滤器中制作 Sqlalchemy 使用日期

PostgreSQL:从转储中恢复数据库 - 语法错误

如何为本地 Rails 元素设置 Postgres 数据库?