从你的数据库中提取一个样本 - Postgresql

7
我们有一个相对较大的数据库,在我们个人开发机上导入需要很长时间。我想知道是否有任何工具可以连接到数据库,进行一些分析,并通过传入参数保留所有关系以提取数据库的样本。类似于pg_sample --rough_size 1000 --dbhost mydbhost --dbuname uname --dbpword pword,这将创建一个转储文件,我可以将其导入我的数据库进行测试和开发。但不会花费45分钟以上的时间。
谢谢。

保持引用完整性的情况下,这将是一个艰巨的任务。想象一下1:n关系,其中表a中的一行引用表b中的5000行... - Erwin Brandstetter
我同意,那会更好。所以我希望它已经被编写了。;) 然而如果您能够提供一些基本类来开始,并将所有内容都放在一个记录计数小于您的rough_size值的表中,那就更好了。 - Sector7B
我很想拥有这样的工具。我可以梦想一下... - Joe Van Dyk
2个回答

6
我编写了这样一个工具:https://github.com/mla/pg_sample
从 README 中可以得知: pg_sample 是一个用于从较大的 PostgreSQL 数据库中导出小型样例数据集的实用工具。输出和命令行选项与 pg_dump 备份工具极为相似(尽管仅支持纯文本格式)。
生成的示例数据库包括原始数据库中的所有表,保持引用完整性,并支持循环依赖关系。

2
我建议您调查pg_dump --format=custompg_restore -j 12custom格式允许并行还原(如果需要,可以转储为原始SQL,因此您不会失去任何功能)。 -j参数用于pg_restore,使其并行运行还原。这可以提供显着的加速。特别是如果您已经将maintenance_work_mem设置得非常大。
它不会直接解决Erwin上面概述的问题,并且因为它需要了解重要的内容和不重要的内容,这在模式中根本不存在。这需要占用开发人员的时间,并且通常应该在首次构建模式时完成。

谢谢,我会调查并回来提供一些数据。 - Sector7B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接