种子开发数据库,​​包含生产数据

时间:2018-06-27 12:35:00

标签: ruby-on-rails postgresql development-environment production-environment seeding

我正在处理使用Postgresql的复杂Rails应用程序。
从头开始创建种子可能太复杂了(有许多模型和激活步骤只能按特定的顺序进行)。

但是我确实需要一些非常准确的种子才能开发新功能。
有没有一种方法可以将某些数据从生产数据库传输到开发数据库?
我也不想仅为此安装gems或修改生产应用程序。

2 个答案:

答案 0 :(得分:1)

  

是否可以将某些数据从生产db传输到开发数据库?

仅转储特定表,并使用转储的sql文件为开发数据库添加种子:

pg_dump -d production_database -t table_one -t table_two ... > /tmp/dev_dump.sql 

The pg_dump have good manual

但是要小心,表经常有外键和其他人员。

答案 1 :(得分:1)

Tonic(免责声明:我在那儿工作)有一个开源解决方案,用于子集Postgres数据库。它在Github上可用,并且是用Python编写的。您可以在这里找到它:https://github.com/TonicAI/condenser

子集设置是一个难题,因为您必须保持参照完整性。我们的方法是建立数据库的网络图,其中表是节点,FK关系是有向边(从父到子)。然后,我们通过topological sort对图形进行排序,并开始机会性地删除行。有一些细微差别,但有些陷阱。例如,有向图可能包含循环,并且在这种情况下拓扑排序将失败。还有很多其他内容,您可以进一步了解here(或只是克隆存储库并拥有它)。