已知限制

在选择将数据库迁移到 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 对等互连。

  • 不支持对目标集群进行 Identity and Access Management 数据库身份验证。 Database Migration Service 使用数据库用户身份验证连接到目标数据库。如需详细了解 IAM,请参阅 AlloyDB for PostgreSQL 文档中的管理 IAM 身份验证。

安全定义器函数

使用 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 逻辑复制,不需要也不执行目标集群降级。
  • 对于标准迁移,现有目标集群必须为空或仅包含默认系统配置数据。标准迁移不支持迁移到包含用户数据(例如表)的现有目标集群。

    如果您因现有目标集群中的额外数据而遇到问题,请清除目标集群中的数据库,然后重试迁移作业。 请参阅 从现有目标集群中清除额外数据。

  • 支持迁移到具有读取池实例的集群。 如需详细了解 AlloyDB for PostgreSQL 集群和实例,请参阅 AlloyDB for PostgreSQL 概览。

数据转储并行处理注意事项

创建迁移作业时,您可以增加并行订阅的数量,以加快初始数据转储和持续变更数据捕获 (CDC) 复制。使用更高的数据转储并行设置还会增加源数据库和目标 AlloyDB for PostgreSQL 集群上的连接和资源利用率。

  • 在使用最大并行度之前,请确保源数据库有足够的 CPU、内存和 I/O 空间。
  • 使用调整后的数据转储并行度时,您必须在源数据库上为 max_replication_slots、max_wal_senders 和 max_worker_processes 配置更高的值。如需详细了解参数计算,请参阅配置源数据库。
  • pglogical 扩展程序会在初始完整转储期间在表级层复制数据。单个非分区表会分配给一个订阅,不会拆分到多个并行订阅或工作器线程中。
  • pglogical 扩展程序会将各个叶分区复制为单独的表,并可在初始完整转储期间将多个叶分区分布到并行订阅中。单个大型叶分区无法拆分到多个订阅中,并且由单个线程复制。
  • Database Migration Service 会按大小对表进行排序,并将其分布在并行订阅中。Database Migration Service 会为每个数据库创建最多 2 个订阅(所有数据库总共最多 2 个),以实现最佳并行度;为每个数据库创建最多 4 个订阅(所有数据库总共最多 4 个),以实现最大并行度,每个迁移的数据库至少有 1 个订阅。例如,如果一个数据库有一个 1 TB 的表和几个小表,Database Migration Service 会将 1 TB 的表隔离在一个订阅中,并将较小的表分布在其余订阅中。即使有多个订阅处于活跃状态,整体初始转储速度仍受复制单个 1 TB 表所需时间的限制。
  • Database Migration Service 会将没有主键的表分配给专用的仅插入复制集(每个并行订阅一个)。多个没有主键的表可以分布在并行订阅中,但在初始完整转储期间,每个单独的表都会作为一个订阅中的单个表流进行复制,而不会拆分到多个并行线程中。

配额

  • 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需腾出空间,请删除未使用的迁移作业和连接配置文件。 如需了解详情,请参阅配额和限制。

主要版本升级期间的 PostgreSQL 扩展程序版本兼容性

迁移到更高的 PostgreSQL 主要版本时,Database Migration Service 会使用 pg_restore 实用程序,该实用程序会安装目标 PostgreSQL 主要版本的默认扩展程序版本。您无法为 pg_restore 实用程序指定确切的扩展程序版本。

如果源数据库使用的扩展程序版本与目标 PostgreSQL 主要版本上安装的默认版本存在架构不兼容问题,则迁移可能会因架构不匹配或内部错误而失败。

为避免迁移失败,请验证架构兼容性。在迁移之前,请将源数据库上的扩展程序升级到与目标 PostgreSQL 主要版本兼容的版本。

后续步骤