如何创建生产数据库样本进行测试?

时间:2010-10-07 14:59:37

标签: database postgresql testing

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

这是我们需要一个测试数据库,但我们不想完全复制生产数据库。首先,因为它太大而且次之,测试的性质意味着测试数据库将在此过程中重建几次。

显然,你不能简单地从某些表中获取随机行,因为这会违反外键的内容而不是。所以,我想知道有没有可以做到的工具?

6 个答案:

答案 0 :(得分:1)

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

当我们合并的公司经理告诉我,我无法继续浪费时间在这些徒劳无益的软件上时,我正在使其适用于SQL系统。

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

答案 1 :(得分:1)

使用像generating some mock data这样的工具databene benerator如何,根据需要,将其存储起来以便重复使用。

答案 2 :(得分:1)

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

来自自述文件:

  

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

     

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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