在选择将数据库迁移到 AlloyDB for PostgreSQL 之前,请考虑此迁移场景的已知限制。
将 PostgreSQL 数据库用作来源时,已知限制包括:
pglogical扩展程序不支持为 PostgreSQL 12 及更高版本复制 生成的列。对表结构 (DDL) 的更改不会通过标准 DDL 命令进行复制,而只能通过使用用于复制的
pglogical扩展程序执行的命令进行复制。这包括对enum类型的更改。- 例如,
pglogical提供了pglogical.replicate_ddl_command函数,该函数允许在一致的时间点对源数据库和副本运行 DDL。在源实例上运行此命令的用户必须已存在于副本上。 - 如需为新创建的表复制数据,您必须使用
pglogical.replication_set_add_table命令将新表添加到现有复制集。 - 如需详细了解迁移过程中的 DDL 复制,请参阅迁移保真度。
- 例如,
对象限制:
- 逻辑复制不会复制外部表。
UNLOGGED和TEMPORARY表不会被复制,也无法复制。- PostgreSQL 逻辑解码不支持大型对象数据类型(
oid引用pg_largeobject)。 - Database Migration Service 不会迁移物化视图中的数据,只会迁移视图架构。如需填充目标数据库中的视图,请运行:
REFRESH MATERIALIZED VIEW view_name;。 - 在持续 CDC 期间,目标上的
SEQUENCE状态(例如last_value)可能与来源不同。序列值会在最终升级步骤中同步。
对于没有主键的表,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和
INSERT语句。UPDATE和DELETE语句的迁移方式因以下情况而异:- 标准迁移:对于没有主键的表,系统不会迁移
UPDATE和DELETE语句。您必须在迁移之前为列添加主键,或手动迁移UPDATE和DELETE语句。 - 快速启动迁移:通过快速启动迁移,如果您将副本标识设置为
INDEX或FULL,则无需主键即可复制UPDATE和DELETE操作。配置REPLICA IDENTITY FULL会增加预写式日志 (WAL) 卷和资源开销。建议您在可行的情况下添加主键。如需了解详情,请参阅 PostgreSQL 副本身份文档和 快速入门迁移指南。
- 标准迁移:对于没有主键的表,系统不会迁移
只能迁移 AlloyDB for PostgreSQL 支持的 PostgreSQL 扩展程序和扩展程序版本。 Database Migration Service 不会迁移 AlloyDB for PostgreSQL 不支持的扩展程序,如果源数据库中存在 AlloyDB for PostgreSQL 不支持的版本,则测试或启动迁移作业可能会失败。为了确保顺利迁移,请确认您的源扩展程序受支持,并且您的应用未引用不受支持的扩展程序。 如需查看支持的扩展程序列表,请参阅 AlloyDB for PostgreSQL 文档中的 支持的扩展程序。
Database Migration Service 不会迁移
pg_cron扩展程序(或该扩展程序中配置的任何 cron 作业),但 AlloyDB for PostgreSQL 目标支持该扩展程序。如果您在源数据库中使用pg_cron,请在迁移完成后重新安装该扩展程序,并在目标集群上配置 cron 作业。Database Migration Service 不支持从处于恢复模式的只读副本进行迁移。
Database Migration Service 不支持应用了 AWS SCT 扩展包的 Amazon RDS 来源。
用 C 语言编写的用户定义的函数无法迁移,但在创建 AlloyDB for PostgreSQL 支持的扩展程序时安装的函数除外。
迁移作业启动后添加到源实例的数据库不会迁移。
使用 Database Migration Service 进行迁移时,您可以选择特定数据库。所选数据库中的所有表和架构都会迁移,但以下内容除外:
- 信息架构 (
information_schema)。 - 任何以
pg_开头的架构(例如pg_catalog、pg_toast、pgtemp*)。如需查看以pg_开头的 PostgreSQL 目录的完整列表,请参阅 PostgreSQL 文档中的 PostgreSQL 系统目录。 - 用户登录凭证和角色。
- 信息架构 (
如果加密数据库需要客户管理的加密密钥 (CMEK) 才能解密数据,而 Database Migration Service 无权访问这些密钥,则无法迁移这些数据库。不过,使用
pgcrypto扩展程序加密的数据可以迁移,因为 AlloyDB for PostgreSQL 支持pgcrypto。Database Migration Service 还支持从加密的 Amazon Aurora 或 Amazon RDS 数据库进行迁移,因为 AWS 会以透明方式处理解密。如需了解详情,请参阅 加密 Amazon Aurora 资源和加密 Amazon RDS 资源。迁移数据库在迁移期间不受写保护:AlloyDB for PostgreSQL 在迁移期间不会以只读模式运行目标实例。虽然您可以连接到目标集群以创建和管理数据库用户或应用必要的架构更改 (DDL),但请勿对正在迁移的数据库或表执行写入操作(例如
INSERT、UPDATE或DELETE)。写入正在迁移的数据可能会导致 复制冲突或迁移失败。触发器行为取决于触发器配置。默认情况下,除非配置了
ALTER EVENT TRIGGER或ALTER TABLE ... ENABLE ALWAYS TRIGGER,否则触发器不会在复制期间在副本上触发。自定义表空间会映射到 AlloyDB for PostgreSQL 中的默认
pg_default表空间。Private Service Connect 接口连接方法仅支持迁移到现有目标集群。如果您想使用专用 IP 连接并在标准迁移中迁移到新的目标集群,请使用 VPC 对等互连。
安全定义器函数
使用 SECURITY DEFINER 定义的函数会以拥有该函数的用户(而非执行该函数的用户)的权限运行。
在持续迁移到 AlloyDB for PostgreSQL 期间,使用 SECURITY DEFINER 定义的例程将归目标主实例上的内部迁移服务用户 alloydbexternalsync 所有。由于 alloydbexternalsync 拥有更高的管理员权限(包括 alloydbsuperuser 和 alloydbreplica 角色),因此任何有权执行这些函数的用户都会以完整的 alloydbsuperuser 权限运行这些函数。这会造成意外的提权风险。
如需消除此风险,请审核目标集群上的所有 SECURITY DEFINER 函数,并在迁移后立即撤消公共执行权限:
REVOKE EXECUTE ON FUNCTION SCHEMA_NAME.FUNCTION_NAME(ARGUMENT_TYPES) FROM PUBLIC; GRANT EXECUTE ON FUNCTION SCHEMA_NAME.FUNCTION_NAME(ARGUMENT_TYPES) TO "AUTHORIZED_USER";
排序规则和语言区域一致性
AlloyDB for PostgreSQL 默认使用 libc 提供的 C.UTF-8 和 en_US.utf8 语言区域。AlloyDB for PostgreSQL 中的所有其他语言区域都使用 International Components for Unicode (ICU) 排序规则。
如果您的源数据库使用基于其他 libc 语言区域的默认排序规则,则该默认设置不会自动沿用。为确保使用 ORDER BY 的查询能获得一致的排序结果,您可能需要在迁移后使用显式 ICU 排序规则更新表。如需了解详情,请参阅 AlloyDB for PostgreSQL 文档中的
导入的数据支持的语言区域。
迁移到现有目标集群的限制
- 每个目标集群只能配置一个活跃迁移作业。
- 标准迁移的目标集群降级:对于到现有 AlloyDB for PostgreSQL 集群的标准迁移,Database Migration Service 会将独立集群降级,以将其配置为源数据库的外部副本。
- 在 Google Cloud 控制台中创建迁移作业时,您必须输入目标集群 ID(或运行
gcloud database-migration migration-jobs demote-destination)来确认降级。 - 快速启动迁移使用 PostgreSQL
pgnative逻辑复制,不需要也不执行目标集群降级。
- 在 Google Cloud 控制台中创建迁移作业时,您必须输入目标集群 ID(或运行
- 对于标准迁移,现有目标集群必须为空或仅包含默认系统配置数据。标准迁移不支持迁移到包含用户数据(例如表)的现有目标集群。
如果您因现有目标集群中的额外数据而遇到问题,请清除目标集群中的数据库,然后重试迁移作业。 请参阅 从现有目标集群中清除额外数据。
- 支持迁移到具有读取池实例的集群。 如需详细了解 AlloyDB for PostgreSQL 集群和实例,请参阅 AlloyDB for PostgreSQL 概览。
数据转储和复制并行处理注意事项
提高数据转储和复制并行度可以加快初始快照转储和持续变更数据捕获 (CDC) 复制的速度,但也会增加源数据库和目标 AlloyDB for PostgreSQL 集群上的连接和资源利用率:
- 在选择
OPTIMAL或MAX并行处理之前,请确保源数据库有足够的 CPU、内存和 I/O 空间。 - 使用调整后的数据转储或复制并行度时,您必须在源数据库和目标数据库上为
max_replication_slots、max_wal_senders和max_worker_processes配置更高的值。如需了解详细的参数计算,请参阅配置源数据库和指定转储和复制并行度。
配额
- 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需腾出空间,请删除未使用的迁移作业和连接配置文件。 如需了解详情,请参阅配额和限制。
主要版本升级期间的 PostgreSQL 扩展程序版本兼容性
迁移到更高的 PostgreSQL 主要版本时,Database Migration Service 会使用 pg_restore 实用程序,该实用程序会安装目标 PostgreSQL 主要版本的默认扩展程序版本。您无法为 pg_restore 实用程序指定确切的扩展程序版本。
如果源数据库使用的扩展程序版本与目标 PostgreSQL 主要版本上安装的默认版本存在架构不兼容问题,则迁移可能会因架构不匹配或内部错误而失败。
为避免迁移失败,请验证架构兼容性。在迁移之前,请将源数据库上的扩展程序升级到与目标 PostgreSQL 主要版本兼容的版本。
后续步骤
如需查看完整的迁移分步演示,请参阅 开始使用 AlloyDB for PostgreSQL 迁移。
如需规划源实例和目标实例之间的网络连接,请参阅 网络注意事项。