概览
本页面包含有助于调试和使用 AlloyDB 的脚本。
迁移非主键表的 UPDATE 和 DELETE 操作
对于没有主键的表,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和 INSERT
语句。
如需更新缺少的 UPDATE
和 DELETE
进程,请参阅本文档的后续部分。
检测源代码和 AlloyDB 目标集群之间缺失的数据
- 确定哪些表没有主键:
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
:已删除的行数
- 将这些结果保存在单独的表中或文件中。
- 迁移设置完成后,请再次运行查询。
- 将结果与第 3 步中的结果进行比较。
如果迁移期间源的 n_tup_upd
或 n_tup_del
值存在差异,则源可能会进行一些更新或删除。
手动将数据从源数据库迁移到 AlloyDB 目标实例
如果您发现源实例和 AlloyDB 目标实例之间存在一些差异,可以使用以下任一选项迁移数据:
方法 1:手动比较源数据与 AlloyDB 目标数据之间的数据,并执行适当的 SQL 查询,以便仅更新源数据与副本之间不同的数据。
方法 2:针对没有主键的表运行
pg_dump
和pg_restore
。如需了解详情,请参阅使用 pg_dump 从本地 PostgreSQL 服务器导出数据。方法 3:使用 Postgres
COPY
命令迁移数据。如需了解详情,请参阅 PostgreSQL 文档。请注意,此步骤要求复制虚拟机能够连接到源虚拟机。