PostgreSQL 教程: 使用 pgAdmin 4 对比数据架构

十月 27, 2023

摘要:pgAdmin 4 提供的架构差异功能,允许您比较两个数据库或两个模式之间的对象。可以使用 工具 菜单访问 架构差异

架构差异功能允许您:

  • 比较和同步数据库对象(从源端到目标端)。
  • 可视化数据库对象之间的差异。
  • 列出目标数据库对象的 SQL 语句的差异。
  • 生成同步脚本。

注意

  • 源数据库服务器和目标数据库服务器的主版本必须相同。
  • 如果比较两个模式,则依赖关系将无法解决。

单击 工具 菜单下的 架构差异 以打开选择面板。要比较数据库,请选择源服务器和目标服务器,以及数据库。要比较模式,请选择源服务器和目标服务器,以及数据库和模式。选择对象后,单击 比较 按钮。

您可以在多个选项卡中同时打开多个 架构差异 面板。要关闭 架构差异 的面板,请单击选项卡栏右上角的 X。您可以通过右键单击并选择 “重命名面板” 选项,来重命名面板标题。

schema diff dialog

可以使用 首选项 对话框指定以下内容:

  • 要在新的浏览器选项卡中打开 架构差异,请将 “在新的浏览器选项卡中打开” 选项设置为 true。
  • 比较字符串对象时,需要 架构差异 忽略空格,请将 忽略空格 选项设置为 true。
  • 在比较对象时,需要 架构差异 忽略所有者。请将 忽略所有者 选项设置为 true。

架构差异 面板分为两个面板:对象比较面板和 DDL 比较面板。

架构差异 - 对象比较面板

在对象比较面板中,您可以选择相同主版本的源服务器和目标服务器,以及要进行比较的数据库。您可以选择对象资源管理器下列出的任何服务器,无论它是在连接中还是已断开连接。如果您选择未连接的服务器,那么在使用该服务器之前会提示您输入密码。

接下来,选择要比较的数据库。数据库可以相同或不同,可以在同一服务器内或来自不同服务器。

Schema diff compare button

使用 比较 按钮附近的下拉菜单,可以选择忽略所有者、空白字符、表空间和授权。

  • 忽略所有者 – 选择此选项,可在比较对象时忽略所有者。
  • 忽略空白字符 – 选择此选项,可在比较字符串对象时忽略空白。空白包括空格、制表符和换行符。
  • 忽略表空间 – 选择在比较对象时忽略表空间。
  • 忽略授权/撤销权限 – 选择此选项,可在比较对象时忽略GRANTREVOKE命令。

选择服务器和数据库后,单击 比较 按钮即可获取 比较结果

Schema diff comparison results

可以使用数据库对象的下拉列表查看 DDL 语句。

对象比较面板的右上角有一个 过滤器 选项,您可以使用该选项,根据以下比较条件过滤数据库对象:

  • 相同 – 如果在两个数据库中找到该对象的 SQL 语句相同,则比较结果相同。
  • 不同 – 如果在两个数据库中都找到该对象,但 SQL 语句不同,则比较结果不同。
  • 仅源 – 如果仅在源数据库中找到对象,而在目标数据库中未找到该对象,则比较结果是 仅源
  • 仅目标 – 如果仅在目标数据库中找到该对象,而在源数据库中未找到该对象,则比较结果是 仅目标

Schema diff filter option

单击对象比较面板中的任何数据库对象,即可在 DDL 比较面板中显示该对象的 DDL 语句。

单击 帮助 图标可打开架构差异文档。

架构差异 - DDL 比较面板

DDL 比较 面板显示三列:

  • 第一列显示源数据库中对象的 DDL 语句。
  • 第二列显示目标数据库中对象的 DDL 语句。
  • 第三列显示两边数据库对象的 SQL 语句的差异。

Schema diff DDL comparison

您可以检视所有数据库对象的 DDL 语句,来检查 SQL 语句的差异。

此外,您还可以基于源数据库对象的 SQL 语句,对目标数据库对象中发现的差异,生成对应的 SQL 脚本。要生成脚本,请在对象比较面板中选中数据库对象的复选框,然后单击对象比较面板右上角的 生成脚本 按钮。

选择数据库对象,然后单击 生成脚本 按钮,在新选项卡中打开 查询工具,与 查询编辑器 的不同之处在于显示的 SQL 语句。

如果您点击了数据库对象来检查 DDL 比较 面板中生成的差异,并且没有选中数据库对象的复选框,pgAdmin 将在新选项卡中打开查询工具,并在 查询编辑器 中显示 SQL 语句中的差异。

您还可以使用 复制 按钮,复制 DDL 比较 面板中生成的差异。

Schema diff generate script query editor

在目标数据库中应用 SQL 语句来同步数据库对象差异。