本页面包含有助于调试和使用 PostgreSQL 的脚本。
迁移针对非主键表的 UPDATE 和 DELETE 操作
对于没有主键的表,在标准迁移中,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和 INSERT 语句。不过,在标准迁移中,系统不会自动为非主键表复制 UPDATE 和 DELETE 语句(在配置 REPLICA IDENTITY 时,快速启动迁移支持复制 UPDATE 和 DELETE 操作)。
如需在标准迁移中检测并手动同步缺失的 UPDATE 和 DELETE 操作,请完成以下部分中的步骤。
检测源集群与 AlloyDB for PostgreSQL 目标集群之间缺失的数据
- 确定源数据库中哪些表没有主键:
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;
- 在启动迁移作业之前,请记录所有没有主键的表的修改统计信息:
其中: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:已删除的行数
- 将这些基准统计信息保存到表或文件中。
- 迁移设置完成后,在提升迁移作业之前,请再次运行该查询。
- 将初始统计信息与最新统计信息进行比较。如果
n_tup_upd或n_tup_del在迁移期间发生了更改,则表示来源上发生了 CDC 未捕获的更新或删除。
手动将数据从源集群迁移到目标 AlloyDB for PostgreSQL 集群
如果您在没有主键的表上检测到差异,可以使用以下任一选项同步数据:
- 选项 1:使用校验和查询或增量脚本手动比较源数据库与目标 AlloyDB for PostgreSQL 集群之间的数据,并针对不一致的记录执行适当的 SQL 更新。
- 选项 2:在应用维护割接期间,专门针对没有主键的表运行
pg_dump和pg_restore。 - 方法 3:使用 PostgreSQL
COPY命令导出和导入表数据。如需了解详情,请参阅 PostgreSQL 文档。