PostgreSQL更新工具?

有没有一个工具(PHP,Perl,Ruby,shell,在线SaaS)可以进行PostgreSQL数据库转储,新架构和迁移(没有数据丢失)? 处理丢弃和添加依赖是一件麻烦事。

简短的回答:不。

较长的答案:从模式A到模式B的方式的神奇决定超出了计算机程序的能力,即使是像数据库系统一样复杂的程序。 一个人需要参与。

你的数据库升级过程应该包括创build一个更新脚本(例如updates-1.3.0.sql ),这个脚本会做适当和必要的事情,包括:

  • CREATE TABLEALTER TABLEDROP TABLE命令
  • CREATE INDEXDROP INDEX命令
  • 任何SQL魔术(插入/删除/更新数据)
  • 创build适当的触发器/约束
  • 进行VACUUM (或适当的VACUUM FULL / VACUUM ANALYZE

然后,将您当前的模式版本(可以将其存储在数据库的数据库中)与您拥有的升级脚本列表进行比较,然后执行升级脚本以转换到新模式。
例如,如果您正在运行架构版本1.2.0并想要转换到1.3.0,则可以应用
updates-1.2.1.sqlupdates-1.2.2.sql 。 。, updates-1.3.0.sql


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

  1. 确保所有内容都包含在一个事务中( COMMIT )。
    如果出现问题,您希望能够在不使数据库处于棘手/不一致状态的情况下中止整个崩溃。

  2. 在编写新的模式时编写更新脚本。
    实际上,在空数据库中编写SQL文件以创build新模式的通常方法是开发升级脚本,然后在空数据库上运行并转储结果模式 – 这可确保“裸机”脚本产生的结果与您从升级过程中获得的结果完全相同。

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