PostgreSQL 更新工具?

PostgreSQL 更新工具?

有没有一种工具(PHP、Perl、Ruby、shell、在线 SaaS)可以转储 PostgreSQL 数据库、创建新架构并进行迁移(不会丢失数据)?处理删除和添加依赖项有点麻烦。

答案1

简短回答:不。

更长的答案:神奇地确定从模式 A 到模式 B 的路径超出了计算机程序的能力,即使是像数据库系统这样复杂的程序也是如此。人类需要参与其中。

您的数据库升级过程应该包括创建一个更新脚本(例如updates-1.3.0.sql),该脚本执行适当且必要的操作,包括:

  • CREATE TABLE和命令ALTER TABLEDROP TABLE
  • CREATE INDEXDROP INDEX命令
  • 任何 SQL Magic(插入/删除/更新数据)
  • 创建适当的触发器/约束
  • VACUUM(或VACUUM FULL/VACUUM ANALYZE视情况而定)

然后,将当前架构版本(可以将其存储在数据库中的某个位置)与您拥有的升级脚本列表进行比较,并执行升级脚本以过渡到新架构。
例如,如果您正在运行架构修订版 1.2.0 并希望过渡到 1.3.0,则应应用
updates-1.2.1.sql, updates-1.2.2.sql, . . .,updates-1.3.0.sql


关于升级脚本的一些提示:

  1. 确保所有内容都包含在事务中(BEGIN... ROLLBACKCOMMIT
    如果出现问题,您希望能够中止整个问题,而不会让数据库处于混乱/不一致的状态。

  2. 编写更新脚本时,请像编写新模式一样编写。
    事实上,我编写 SQL 文件以在空数据库中创建新模式的常用方法是开发升级脚本,然后在空数据库上运行它并转储生成的模式 - 这可确保“裸机”脚本产生的结果与您从升级过程中获得的结果相同。

  3. 预计升级会失败 - 包括详细错误(RAISE EXCEPTION/ RAISE NOTICE),并确保如果遇到错误,执行升级 sql 脚本的程序会停止。

相关内容