【问题标题】:How to create production database sample for testing?如何创建用于测试的生产数据库示例?
【发布时间】:2014-10-12 07:46:09
【问题描述】:

是否有工具(理想情况下适用于 PosgreSQL)可以制作一个小型但一致大型数据库的示例?

这是我们需要一个测试数据库,但我们不想完全复制生产数据库。一是因为太大,二是测试的本质意味着测试数据库会在这个过程中多次重新创建。

显然,您不能简单地从某些表中获取随机行,因为这会违反外键等问题。那么,我想知道是否有可用的工具可以做到这一点?

【问题讨论】:

  • 可以通过命令行导入数据库。在测试阶段之前使用批处理文件导入数据库?您是否实际导出和导入了数据库以查看实际需要多长时间?它可能没有你想象的那么糟糕。您已经拥有良好的数据这一事实,我会尽可能地利用它。
  • 大数据库有什么问题?我实际上更喜欢使用大型数据库进行测试,因为它还会在测试时告诉您性能危害在哪里。无论如何,我现在不知道有什么工具可以做到这一点。
  • @mezzie 没关系,当您进行正常测试时,即当您测试应用程序时。但首先,您测试 update_process,每次失败时,您都必须重新创建数据库,坦率地说,这种情况发生得更频繁,我想承认 :)
  • 我明白你在说什么,但你不需要一直使用 pg_dump/pg_restore。如果需要重新加载,您可以压缩数据目录并解压缩。它也会更快。

标签: database postgresql testing


【解决方案1】:

generating some mock datadatabene benerator 之类的工具怎么样,随心所欲,并将它们存储起来以供重复使用。

【讨论】:

  • 看起来很有希望。我想我会尝试这种方法,谢谢!
  • @maksymko 不客气。我是 Benerator 的一个非常满意的用户,我很确定你会喜欢它。
【解决方案2】:

我曾经为 IDMS 系统构建过这样的工具。

当我们合并的公司的经理告诉我,我不能继续在这些无用和不必要的软件上浪费时间时,我也正在使它适用于 SQL 系统。

直到今天,我仍然没有看到或听说过任何与我当时所取得的成就相匹配的商业产品。

【讨论】:

    【解决方案3】:

    是的,我为此编写了一个工具:https://github.com/mla/pg_sample

    来自自述文件:

    pg_sample 是一个实用程序,用于从 更大的 PostgreSQL 数据库。输出和命令行选项 非常类似于 pg_dump 备份实用程序(尽管只有 支持纯文本格式)。

    生成的示例数据库包括原始的所有表, 维护引用完整性,并支持循环依赖。

    【讨论】:

      【解决方案4】:

      您可以使用pg_dump --schema-only 仅转储数据库的架构。然后使用pg_restore 将转储加载到新数据库中。从那里你有几个选择:

      1. 手动创建数据;这将允许您覆盖边缘情况,但如果您想测试大量数据,则需要一段时间。

      2. 编写一些查询脚本以导入数据库中每个表的随机部分。正如您所说,这将违反外键约束,但是当它确实忽略失败时。跟踪成功的数量并继续进行,直到您拥有所需的数据项为止。但是,如果您有非常严格的约束,这可能无法根据您的架构工作,因为可能需要很长时间才能找到后续数据。

      【讨论】:

        【解决方案5】:

        回到我的 Oracle 时代,我们将拥有一个测试数据库,其中包含非常小的自动生成的数据集。当时它大约是生产数据库大小的五分之一。我们会从生产数据库中复制统计数据并将它们放入我们的测试数据库中,让它认为表中有数十亿行,而实际上它只有 500,000 行。这使我们能够在测试中获得我们将在生产中获得的解释计划。它有它的价值,但不能解决你所有的问题,我不确定弄乱 PostgreSQL 的统计数据是多么容易甚至可行。

        【讨论】:

          【解决方案6】:

          您可以创建自定义脚本来创建有意义的生产数据副本或使用商业产品,例如 Informatica data subsetIBM optim

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-11-22
            • 1970-01-01
            • 1970-01-01
            • 2019-11-24
            • 2011-08-08
            • 2019-07-30
            • 1970-01-01
            相关资源
            最近更新 更多