概览
在选择将数据库迁移到 Cloud SQL 之前,请务必考虑此迁移场景的已知限制。
使用 PostgreSQL 数据库作为来源的已知限制包括:
pglogical扩展程序不支持复制 生成的列 PostgreSQL 12 及更高版本。对表结构 (DDL) 的更改不会通过标准 DDL 命令复制,而只会通过使用用于复制的
pglogical扩展程序执行的命令复制。这包括 对enum类型的更改。例如,
pglogical提供了一个函数pglogical.replicate_ddl_command,该函数允许在 来源数据库和副本上以一致的方式运行 DDL。在来源上运行此命令的用户必须已存在于副本上。如需复制新表的数据,您必须使用
pglogical.replication_set_add_table命令将新表添加到现有复制集中。
对于没有主键的表,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和
INSERT语句。您应手动迁移UPDATE和DELETE语句。Database Migration Service 不会迁移具体化视图中的数据,只会迁移视图架构。如需填充视图,请运行以下命令:
REFRESH MATERIALIZED VIEW view_name。新 Cloud SQL 目标上的
SEQUENCE状态(例如last_value)可能与来源SEQUENCE状态不同。UNLOGGED和TEMPORARY表不会复制,也无法复制。不支持 Large Object 数据类型。如需了解详情,请参阅 迁移保真度部分。
只能迁移 Cloud SQL for PostgreSQL 支持的 扩展程序和过程语言 。 Database Migration Service 不会迁移 Cloud SQL 不支持的扩展程序。这些扩展程序的存在不会阻止迁移,但为了确保迁移过程顺利进行,请验证您的对象或应用是否引用了任何不受支持的扩展程序。我们建议您在继续操作之前,从来源数据库中移除这些扩展程序和引用。
Database Migration Service 不会迁移
pg_cron扩展程序(或与该扩展程序关联的任何cron设置),但 Cloud SQL for PostgreSQL 目标支持该扩展程序。如果您在来源数据库中使用pg_cron扩展程序,则可以在迁移完成后将其重新安装到目标实例上。
Database Migration Service 不支持从处于恢复模式的读取副本进行迁移。
Database Migration Service 不支持应用了 AWS SCT 扩展程序包的 Amazon RDS 来源。
- 以 C 语言编写的用户定义函数无法迁移,但安装 Cloud SQL 支持的 扩展程序时安装在 PostgreSQL 数据库中的函数除外。
如果来源数据库中存在其他扩展程序和过程语言,或者其版本不受支持,那么当您测试或启动迁移作业时,该作业将失败。
在迁移作业开始后添加的数据库不会迁移。
- 使用 Database Migration Service 进行迁移时,您无法选择特定表或架构。
Database Migration Service 会迁移所有表和架构,但以下项除外:
- 信息架构 (
information_schema)。 - 以
pg开头的任何表,例如pg_catalog。如需查看以pg开头的所有 PostgreSQL 目录的完整列表,请参阅 PostgreSQL 系统目录 在 PostgreSQL 文档中。 - 有关用户和用户角色的信息不会迁移。
- 信息架构 (
如果加密的数据库需要客户管理的加密密钥来解密数据库,并且 Database Migration Service 无权访问这些密钥,则无法迁移这些数据库。
不过,如果客户数据由
pgcrypto扩展程序 加密,则可以使用 Database Migration Service 迁移数据(因为 Cloud SQL 支持该扩展程序)。Database Migration Service 还支持从加密的 Amazon Aurora 或 Amazon RDS 数据库迁移数据,因为这些数据库在其服务中以透明方式处理解密。如需了解详情,请参阅加密 Amazon Aurora 资源和加密 Amazon RDS 资源。
在迁移期间,目标 Cloud SQL 数据库是可写的,以便在需要时应用 DDL 更改。请注意,不要对数据库配置或表结构进行任何更改,以免导致迁移过程中断或影响数据完整性。
触发器行为取决于其配置方式。默认行为是它们不会触发,但如果它们是使用
ALTER EVENT TRIGGER或ALTER TABLE语句配置的,并且触发器状态设置为 replica 或 always,那么它们将在复制期间在副本上触发。具有安全定义器的函数将由 Cloud SQL 副本中的
cloudsqlexternalsync创建。当任何用户执行该函数时,它将使用具有cloudsqlsuperuser和cloudsqlreplica角色的cloudsqlexternalsync的权限执行。最好将安全定义器函数的使用限制为仅限某些用户。为此,用户应撤消默认的 PUBLIC 权限,然后有选择地授予执行权限。Cloud SQL 不支持自定义表空间。自定义表空间内的所有数据都会迁移到 Cloud SQL 目标实例中的
pg_default表空间。Private Service Connect 接口连接方法 仅支持迁移到现有目标实例。 如果您想使用专用 IP 连接并迁移到新的目标实例,请使用 VPC 对等互连。
迁移到现有目标实例的限制
- 您的现有目标实例只能包含在您创建目标实例时自动设置的默认系统数据库
。
不支持迁移到包含用户数据(例如系统架构中的表或数据库)的现有目标实例。
如果您因现有目标 实例中的额外数据而遇到问题,请清除目标实例中的数据库,然后重试迁移作业。 请参阅 清除现有目标实例中的额外数据。
- 每个目标实例只能配置一个迁移作业。
- 您只能迁移到独立 Cloud SQL 实例。不支持迁移到 外部服务器副本。
- 升级实例后,您必须启用时间点恢复。
- 如果实例具有自定义备份设置(例如自定义备份位置),则我们建议您在提升实例后再次自定义备份设置。在升级过程中,Cloud SQL 会将备份设置重置为默认值。
- 对于 Terraform 用户:Database Migration Service 会修改目标实例的备份 和恢复设置。这可能会导致 目标实例设置与您用于预配的 Terraform 配置不同。如果您遇到此问题, 请按照诊断问题中的指南操作。
配额
- 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。
- 您的现有目标实例只能包含在您创建目标实例时自动设置的默认系统数据库
。
不支持迁移到包含用户数据(例如系统架构中的表或数据库)的现有目标实例。