PostgreSQL:模式差异/补丁工具

Ada*_*tan 16 schema postgresql

考虑以下设置:

  • 生产数据库
  • 一个开发数据库,​​在其上进行架构更改以启用新功能

当新功能的开发完成后,我必须手动更新 prod db 模式,直到pg_dump --schema-only两个数据库上的相同为止。这个过程容易出错且乏味。

所以,我正在寻找一种可以:

  • 显示两个模式之间差异的摘要(如diff)。请注意,我不是在寻找模式的单纯文本差异,而是一个更精细的工具,可以得出诸如“表X有一个新列Y”之类的结论。
  • 自动生成将一种模式转换为另一种模式的 SQL 代码(如patch

是否有架构差异/补丁工具可以帮助我将生产架构转换为更高级的开发架构?

Ewa*_*wan 12

抱歉复活了一个老问题

最近我一直在使用JetBrains的0xDBE DataGrip数据库管理工具。

它在优秀的 Jetbrains IDE 中支持多个数据库引擎,我发现一个有用的关键功能是能够处理diff2 个表(DEV 和 PROD)。

下面是运行中差异的屏幕截图(在这种情况下,只有一列差异)。屏幕截图是顶部“合并右侧”按钮的结果,生成将正确的表从头开始所需的 SQL。

0xDBE SQL 表差异

希望这个新工具有所帮助。

  • 复活旧问题没有问题(甚至可以从中获得徽章)。还有一个问题:是否可以比较整个数据库(我的意思是,至少,其中的所有表)? (3认同)
  • 我最近遇到了一个用 python 编写的新工具,[migra](https://github.com/djrobstep/migra)。它可以跟踪对表、视图、函数、索引、约束、枚举、序列和已安装扩展的更改,也可以用作库 (3认同)

Nei*_*gan 6

使用liquibase

它支持diff,从头开始生成一个数据库,修补一个数据库,回滚一个数据库,以及一堆其他的东西。

您过去必须使用 liquibase 以 XML 格式编写所有内容,但现在不再需要了。您可以使用您选择的 SQL 方言编写 99% 的内容。例子:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;
Run Code Online (Sandbox Code Playgroud)

您应该将 liquibase 更改日志保存在 git 或 what-have-you 中。

  • [Flyway](http://flywaydb.org) 是另一个类似于 Liquibase 的选择。 (2认同)