如果这是一个简单的问题,我深表歉意。仅通过搜索很难找到答案。
将开发数据库中的更改部署到实时版本的最佳工作流程是什么?
我的应用程序的数据库是在Heroku上运行的Postgres。使用用户内容定期更新。我有一个本地运行的开发版本(内容已过时)。
我已经在本地数据库中创建了一个新表,我想对其进行实时部署。在不复制实时服务器上的所有工作并且不克隆本地副本的情况下,如何做到这一点?
非常感谢你的帮助!
最佳答案
tl; dr
使用Flyway自动应用您的SQL脚本集合。
数据库迁移
术语“数据库迁移”似乎描述了将变更从开发到测试再到生产机移动到数据库结构的繁琐工作。
飞路
Flyway项目是一个基于Java的工具包,用于跟踪一系列用于更新数据库的SQL脚本和Java jar文件。
这里没有特殊的魔术。该工具会查找以约定命名的文件,以便在您的SQL脚本上放置一个序列号。该工具在数据库中创建一个额外的表来存储其元数据,包括上一次应用的脚本的编号。该工具将扫描是否存在任何较新的文件,将其应用,并使用上次应用的脚本号更新元数据表。
因此,部署意味着只需将最新的SQL脚本移到部署计算机上,然后让Flyway进行工作即可。
另一个好处是可以将数据库快速重建到特定点以用于测试。同样,与持续集成一起使用可很好地自动保持数据库的正确形状。
您为这些福利付出的代价是纪律。您绝不能再对数据库的结构进行即时更改。所有更改都必须编写为SQL脚本(也可以选择编写为jar中的Java代码),并通过Flyway应用。
如果从数据库创建的一开始就使用它就更容易了。但是,您也可以“基线”开始与现有数据库一起使用。
Flyway包括命令行工具以及Java API接口(interface)。因此,即使不是以Java为中心的应用程序也可以使用Flyway。
开源,免费。支持许多数据库,包括Postgres。
液基
Liquibase项目是另一个与Flyway用途非常相似的工具。