【问题标题】:How to update table structures and stored procedures from Development to Production server in PostgreSQL?如何在 PostgreSQL 中将表结构和存储过程从开发服务器更新到生产服务器?
【发布时间】:2015-05-28 06:36:52
【问题描述】:

我有三个 PostgreSQL 服务器:

  1. 发展,
  2. 练习
  3. 生产

生产服务器拥有所有感兴趣的数据并且正在大量使用。然而,经过数月的开发,开发服务器已经有了一些新的表和不同的表结构以及新的和更改的存储过程。

有没有办法自动检测开发服务器和生产服务器之间哪些表和存储过程不同,从而自动更改生产服务器以匹配开发服务器中的新/更改的表和过程?还是我被困在一个表一个表和一个存储过程的存储过程中手动?

当然,目标是保留生产服务器的表数据,但保留开发服务器的表和过程。

【问题讨论】:

  • 查看 Liquibase 或 Flyway 等架构迁移工具。不要不要尝试“区分”不同的实例。维护存储在版本控制系统中的正确迁移脚本。永远不要“即时”手动更改模型
  • @a_horse_with_no_name 对我来说都是新术语。任何建议的链接可以显示如何在开发和生产服务器之间使用 Liquibase 生成更改文件,以便可以将生产服务器更改为新表和存储过程?谢谢。
  • @RadekPostołowicz 谢谢。任何示例如何在 PostgreSQL 中使用 Liquibase 的命令行?

标签: postgresql


【解决方案1】:

这里是使用 liquibase 和 postgresql 生成 sql 格式的数据库差异的简短分步教程。

我假设你已经安装了 java。

  • 下载 liquibase 本身
  • http://jdbc.postgresql.org下载最新版本的postgresql jdbc驱动并放到liquibase home的lib目录下
  • 运行

./liquibase --driver=org.postgresql.Driver --url=jdbc:postgresql://host1:port1/dbname1 --username=user1 \ --password=pass1 \ diffChangelog \ --referenceUrl=jdbc:postgresql://host2:port2/dbname2 \ --referenceUsername=user2 \ --referencePassword=pass2 > db-changelog.xml

这里的参考数据库是您进行更改的地方。

  • 最后一步是运行 sql 脚本(针对host1:port1 的数据库):

./liquibase --driver=org.postgresql.Driver \ --url=jdbc:postgresql://host1:port1/dbname1 \ --username=user1 \ --password=pass1 \ --changeLogFile=db-changelog.xml \ updateSql > changes.sql

在您将生成的 sql 脚本应用到生产数据库之前,您应该清理它 - liquibase 引入了一些元数据表(databasechangelogdatabasechangeloglock) - 但这只是简单的搜索和删除。

就是这样。

最后一点就像@a_horse_with_no_name 所说:花一些时间学习如何将您的数据库更改放入VCS 并避免手动执行它们(有利于 liquibase 或 flyway)。

【讨论】:

  • 同意。如果我几年前第一次从 FoxPro 迁移到 PostgreSQL 时就知道这一点,我肯定会这样做 :)。现在我被两个现有的数据库困住了,需要将它们合二为一……不好玩。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
相关资源
最近更新 更多