【问题标题】:Seeding Development database with data from Production使用来自生产的数据播种开发数据库
【发布时间】:2018-12-06 08:37:33
【问题描述】:

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

但无论如何,我确实需要一些非常准确的种子来开发新功能。
有没有办法将一些数据从生产数据库传输到开发数据库?
我也不想为此安装 gem 或修改生产应用程序。

【问题讨论】:

  • 下载生产数据库转储并导出到本地数据库。
  • 假设您可以访问生产数据库,您应该像 jagdeep 所说的那样创建一个转储文件:“pg_dump production_dbname > dumpfile”,然后您可以通过:'psql dev_dbname

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


【解决方案1】:

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

子集是一个难题,因为您必须保持参照完整性。我们的方法是构建数据库的网络图,其中表是节点,FK 关系是有向边(从父节点到子节点)。然后,我们通过topological sort 对图表进行排序,并开始有机会地删除行。那里有一些细微差别,但也有一些陷阱。例如,有向图可以包含循环,当这种情况发生时,拓扑排序将失败。它还有很多内容,您可以阅读更多关于它的信息here(或者只是克隆 repo 并拥有它)。

【讨论】:

    【解决方案2】:

    有没有办法将一些数据从生产数据库传输到开发数据库?

    仅转储特定表并使用转储的 sql 文件为您的开发数据库提供种子:

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

    The pg_dump have good manual

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-25
      • 2011-11-19
      • 2012-04-15
      • 2016-12-16
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      相关资源
      最近更新 更多