postgresql - 如何实现 PostgreSQL 数据库的架构迁移
问题描述
我需要为 PostgreSQL 实现模式迁移机制。只是为了消除歧义:对于模式迁移,我的意思是我需要将我的数据库结构升级到最新版本,而不管它们在特定服务器实例上的当前状态如何。
例如,在版本一中我创建了一些表,然后在版本二中我重命名了一些列,在版本三中我删除了一个表并创建了另一个。我有多个服务器,在其中一些服务器上我有版本一,一些版本三等。
我的想法:
- 为产生的输出生成哈希
pg_dump --schema-only
每次在我更改数据库架构之前。这将是一种可靠的方式来识别将来应该应用补丁的数据库版本。
- 包含补丁列表以及它们应该应用的相关散列。
- 当我需要升级我的数据库时,我将运行一个应用程序来搜索与当前数据库结构相对应的哈希(通过计算本地数据库的哈希并将其与我拥有的哈希集进行比较)并应用相关的补丁。
- 重复直到找不到下一个哈希。
您能否指出这种方法的任何弱点?
解决方案
你听说过https://pgmodeler.io吗?在我工作的公司,我们决定这样做,因为它甚至可以在本地和远程之间执行模式差异。我们对此非常满意。
否则,如果您更喜欢免费的解决方案,您可以开发一个迁移工具,该工具可用于应用您存储在单个存储库中的迁移。此外,该工具可以依赖于migration
您保存在单独模式中的表,以便您的数据库始终知道应用了哪些迁移。
这种方法的美妙之处在于,迁移既可以涉及架构更改,也可以涉及数据更改。
我希望这能给你一些想法。
推荐阅读
- azure - Apache Spark 错误,未找到克隆的 Python 环境
- html - 我使用引导卡,在小型设备上,这些卡与我的下一个 div 重叠,我找不到什么问题
- c++ - 如何处理cpp中指向数组的指针的未定义行为?
- javascript - 仅当 URL 存在时如何从 URL 获取过滤器值
- ios - Objective-C iOS 14:将极性设置为立体声会产生全向。关注苹果文档
- python - 对函数中导入变量的全局访问是否违反了黑盒范式?
- python - 在 kafka 值中使用 protobuf 消息存储失败
- amazon-web-services - 从 AMI 恢复 Bitbucket 时,远程身份验证服务器不可用
- node.js - 是否可以将 nodejs 流与 Shaka Packager 一起使用?
- azure-devops - 我应该为 dev 和 prod 提供不同的 CI/CD,还是可以为我在 azure devops 中的所有环境和应用程序提供一个