【问题标题】:Postgres - how to deploy changes from dev database to live versionPostgres - 如何将更改从开发数据库部署到实时版本
【发布时间】:2017-09-16 07:54:00
【问题描述】:

如果这是一个简单的问题,我深表歉意 - 仅通过搜索很难找到答案。

将更改从开发数据库部署到实时版本的良好工作流程是什么?

我的应用程序的数据库是在 Heroku 上运行的 Postgres。它会定期更新用户内容。我有一个本地运行的开发版本(内容过时)。

我在本地数据库中创建了一个新表,我想实时部署它。如何在不复制实时服务器上的所有工作且不克隆本地副本的情况下做到这一点?

非常感谢您的帮助!

【问题讨论】:

    标签: database postgresql heroku deployment


    【解决方案1】:

    tl;博士

    使用 Flyway 自动应用您的 SQL 脚本集合。

    数据库迁移

    “数据库迁移”一词似乎描述了将数据库结构的更改从开发转移到测试再转移到生产机器的这种苦差事。

    • 过去,开发人员和管理员以一种特别的方式完成此任务,将一些 SQL 和代码组合在一起——加上希望和祈祷。
    • 近年来,一些工具似乎将其转变为一个有组织的、可靠的、可重复的、可测试的和自我记录的过程。

    飞行路线

    Flyway 项目是一个基于 Java 的工具包,用于跟踪用于更新数据库的一系列 SQL 脚本和 Java jar 文件。

    这里没有什么特别的魔法。该工具会查找以约定命名的文件,以便在 SQL 脚本上放置序列号。该工具会在您的数据库中创建一个额外的表来存储其元数据,包括最后应用的脚本的编号。该工具扫描存在的任何较新文件,应用它们,并使用最后应用脚本的编号更新元数据表。

    因此,部署意味着只需将最新的 SQL 脚本移动到部署机器上并让 Flyway 完成其工作。

    另一个好处是快速将数据库重建到某个点以用于测试。同样,也适合与持续集成一起使用,以自动使数据库保持正确的形状。

    您为这些好处付出的代价是纪律。您必须永远不要再次对数据库结构进行任何即时更改。所有更改都必须编写为 SQL 脚本(也可以选择为 jar 中的 Java 代码)并通过 Flyway 应用。

    如果从创建数据库的一开始就使用它会更容易。但您也可以“基线”开始使用现有数据库。

    Flyway 包括命令行工具以及 Java API 接口。因此,即使是非以 Java 为中心的应用程序也可以使用 Flyway。

    开源且免费。支持许多数据库,包括 Postgres。

    Liquibase

    Liquibase 项目是另一个与 Flyway 用途非常相似的工具。

    【讨论】:

    • flywaydb.com 没有解决。 flywaydb.org 有效。
    • @jamie 固定网址。仅供参考,在 Stack Overflow 上,欢迎您直接编辑答案以修复此类错误。
    【解决方案2】:

    我为此任务使用 EMS DB Comparer for PostgreSQL。不幸的是,它不是免费的,但多年来我找不到更好的选择。可以比较两个数据库并生成 create/alter/etc 脚本。很简单,有很多选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2010-09-05
      • 1970-01-01
      • 2014-05-30
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多