我正在处理使用Postgresql的复杂Rails应用程序。
从头开始创建种子可能太复杂了(有许多模型和激活步骤只能按特定的顺序进行)。
但是我确实需要一些非常准确的种子才能开发新功能。
有没有一种方法可以将某些数据从生产数据库传输到开发数据库?
我也不想仅为此安装gems或修改生产应用程序。
答案 0 :(得分:1)
是否可以将某些数据从生产db传输到开发数据库?
仅转储特定表,并使用转储的sql文件为开发数据库添加种子:
pg_dump -d production_database -t table_one -t table_two ... > /tmp/dev_dump.sql
但是要小心,表经常有外键和其他人员。
答案 1 :(得分:1)
Tonic(免责声明:我在那儿工作)有一个开源解决方案,用于子集Postgres数据库。它在Github上可用,并且是用Python编写的。您可以在这里找到它:https://github.com/TonicAI/condenser。
子集设置是一个难题,因为您必须保持参照完整性。我们的方法是建立数据库的网络图,其中表是节点,FK关系是有向边(从父到子)。然后,我们通过topological sort对图形进行排序,并开始机会性地删除行。有一些细微差别,但有些陷阱。例如,有向图可能包含循环,并且在这种情况下拓扑排序将失败。还有很多其他内容,您可以进一步了解here(或只是克隆存储库并拥有它)。