概览
在选择将数据库迁移到 Cloud SQL 之前,请务必考虑此迁移场景的已知限制。
将 PostgreSQL 数据库用作来源的已知限制包括:
pglogical
扩展程序不支持 PostgreSQL 12 及更高版本的生成列复制。表结构 (DDL) 的更改不会通过标准 DDL 命令复制,而只能通过使用用于复制的
pglogical
扩展程序执行的命令复制。例如,
pglogical
提供了一个函数pglogical.replicate_ddl_command
,可允许 DDL 在源数据库和副本上同时运行。在源代码上运行此命令的用户必须已在副本上存在。如需为新表复制数据,您必须使用
pglogical.replication_set_add_table
命令将新表添加到现有复制集。如需详细了解迁移期间的 DDL 复制,请参阅迁移保真度部分。
对于没有主键的表,Database Migration Service 支持在变更数据捕获 (CDC) 阶段迁移初始快照和
INSERT
语句。您应手动迁移UPDATE
和DELETE
语句。Database Migration Service 不会迁移具体化视图中的数据,只会迁移视图架构。如需填充视图,请运行以下命令:
REFRESH MATERIALIZED VIEW view_name
。新 Cloud SQL 目标上的
SEQUENCE
状态(例如last_value
)可能会与来源SEQUENCE
状态不同。UNLOGGED
和TEMPORARY
表不会复制,也无法复制。不支持大型对象数据类型。如需了解详情,请参阅迁移保真度部分。
只有 Cloud SQL 支持的 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
开头的架构的完整列表。
- 信息架构 (
如果加密数据库需要使用客户管理的加密密钥对数据库进行解密,而 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
语句配置了触发器,并且触发器状态设置为“副本”或“始终”,则在复制期间,触发器会在副本上触发。具有安全定义器的函数将由
cloudsqlexternalsync
在 Cloud SQL 副本中创建。当任何用户执行该脚本时,都会使用具有cloudsqlsuperuser
和cloudsqlreplica
角色的cloudsqlexternalsync
的权限来执行该脚本。最好将安全定义器函数的使用限制为仅限部分用户。为此,用户应撤消默认的 PUBLIC 权限,然后选择性地授予执行权限。Cloud SQL 不支持自定义表空间。自定义表空间中的所有数据都会迁移到 Cloud SQL 目标实例中的
pg_default
表空间。
迁移到现有目标实例的限制
- 现有目标实例必须为空,或者仅包含系统配置数据。不支持迁移到包含用户数据(例如表)的现有目标实例。
如果您因现有目标实例中存在额外数据而遇到问题,请清除目标实例中的数据库,然后重试迁移作业。 请参阅从现有目标实例中清除额外数据。
- 每个目标实例只能配置一个迁移作业。
- 您只能迁移到独立的 Cloud SQL 实例。不支持迁移到外部服务器副本。
- 不支持将数据迁移到启用了 Private Service Connect 的 Cloud SQL 实例。
- 提升实例后,您必须开启时间点恢复。
- 如果实例具有自定义备份设置(例如自定义备份位置),则您必须在提升实例后再次自定义备份设置。在升级过程中,Cloud SQL 会将备份设置重置为默认值。
- 对于 Terraform 用户:Database Migration Service 会修改目标实例的备份和恢复设置。这可能会导致目标实例设置与您用于预配的 Terraform 配置不同。如果您遇到此问题,请按照诊断问题中的指南操作。
配额
- 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。