首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅对开发快照的部分表进行Postgres转储

仅对开发快照的部分表进行Postgres转储
EN

Stack Overflow用户
提问于 2009-11-17 05:54:34
回答 3查看 41.5K关注 0票数 105

在生产环境中,我们的数据库大小为几百On。为了进行开发和测试,我们需要创建此数据库的快照,这些快照在功能上相同,但大小仅为10或20 in。

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

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

has N Divisions

  • Division has N Employees

  • Employee has N

(考勤公司有N个考勤记录N个考勤记录)

可能有1,000家公司,2,500个部门,175000名员工和数千万的出勤记录。我们想要一种可复制的方式来提取前100家公司及其所有组成部门、员工和考勤记录。

我们当前对模式使用pg_dump,然后运行带有--disable-triggers和-- data -only的pg_dump,以便从较小的表中获取所有数据。我们不想编写自定义脚本来提取部分数据,因为我们有一个快速的开发周期,并且担心自定义脚本将是脆弱的,并且可能会过时。

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

任何一般的建议也很感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-17 10:26:09

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

代码语言:javascript
复制
COPY (SELECT * FROM mytable WHERE ...) TO '/tmp/myfile.tsv'

COPY mytable FROM 'myfile.tsv'

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

您应该考虑维护一组开发数据,而不只是提取生产的一个子集。在编写单元测试的情况下,您可以使用测试所需的相同数据,尝试满足所有可能的用例。

票数 110
EN

Stack Overflow用户

发布于 2009-11-17 07:40:37

我不知道有什么软件已经做到了这一点,但我能想到3个替代解决方案。不幸的是,它们都需要一些自定义编码。

  1. 在单独的方案中重新创建所有表,然后使用INSERT INTO copy.tablename SELECT * FROM tablename WHERE ...将要转储的数据子集仅复制到这些表中。
  2. 编写您自己的脚本,用于将数据转储为SQL语句。我在过去使用过这种方法,它只需要大约20-30行PHP.
  3. 修改pg_dump,以便在转储单个表时接受带有-t开关的条件。
票数 9
EN

Stack Overflow用户

发布于 2012-07-24 11:42:18

http://jailer.sourceforge.net/可以做到这一点。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1745105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档