调试和其他工具

本页面包含有助于调试和使用 PostgreSQL 的脚本。

迁移针对非主键表的 UPDATE 和 DELETE 操作

对于没有主键的表,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和 INSERT 语句。

如需更新缺失的 UPDATE 和 DELETE 流程,请参阅本文档的后续部分。

检测源实例和 Cloud SQL 目标实例之间缺失的数据

  1. 确定哪些表没有主键:
    SELECT tab.table_schema,
           tab.table_name
    FROM information_schema.tables tab
    LEFT JOIN information_schema.table_constraints tco 
              ON tab.table_schema = tco.table_schema
              AND tab.table_name = tco.table_name 
              AND tco.constraint_type = 'PRIMARY KEY'
    WHERE tab.table_type = 'BASE TABLE'
          AND tab.table_schema NOT IN ('pg_catalog', 'information_schema', 'pglogical')
          AND tco.constraint_name IS NULL
    ORDER BY table_schema,
             table_name;
  2. 在开始迁移之前,请使用以下查询检查所有没有主键的表是否有任何更新或删除操作:
    SELECT schemaname,
           relname,
           n_tup_ins,
           n_tup_upd,
           n_tup_del
    FROM pg_stat_user_tables
    WHERE schemaname NOT IN
      ('pglogical', 'pg_catalog', 'information_schema');
    其中:
    • n_tup_ins:插入的行数
    • n_tup_upd:更新的行数(包括 HOT 更新的行)
    • n_tup_del:已删除的行数
  3. 将这些结果保存在单独的表或文件中。
  4. 迁移设置完成后,再次运行查询。
  5. 将结果与第 3 步的结果进行比较。

如果迁移期间来源上的 n_tup_upd 或 n_tup_del 值存在差异,则来源上可能会有一些更新或删除操作。

手动将数据从源实例迁移到 Cloud SQL 目标实例

如果您检测到源实例与 Cloud SQL 目标实例之间存在一些差异,可以使用以下任一选项迁移数据:

  • 选项 1:手动比较源数据库和 Cloud SQL 目标数据库之间的数据,并执行适当的 SQL 查询,以便仅更新源数据库和副本之间不同的数据。

  • 方法 2:针对没有主键的表运行 pg_dump 和 pg_restore。如需了解详情,请参阅使用 pg_dump 从本地 PostgreSQL 服务器导出数据。

  • 选项 3:使用 PostgreSQL COPY 命令迁移数据。如需了解详情,请参阅 PostgreSQL 文档。请注意,此步骤要求副本虚拟机能够连接到源虚拟机。