概览
在选择将数据库迁移到 Cloud SQL 之前,请务必考虑此迁移方案的已知限制。
将 PostgreSQL 数据库用作来源的已知限制包括:
对于 PostgreSQL 12 及更高版本,
pglogical
扩展程序不支持复制生成列。表结构 (DDL) 的更改不会通过标准 DDL 命令进行复制,而只会通过使用用于复制的
pglogical
扩展程序执行的命令进行复制。这包括 对enum
类型的更改。例如,
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
开头的 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
创建。当任何用户执行该过程时,该过程将以cloudsqlexternalsync
的权限执行,而cloudsqlexternalsync
具有cloudsqlsuperuser
和cloudsqlreplica
角色。最好将安全定义者函数的使用限制为仅限部分用户。为此,用户应撤消默认的 PUBLIC 权限,然后有选择地授予执行权限。Cloud SQL 不支持自定义表空间。自定义表空间中的所有数据都会迁移到 Cloud SQL 目标实例中的
pg_default
表空间。
迁移到现有目标实例的限制
- 现有目标实例必须为空,或者仅包含系统配置数据。不支持迁移到包含用户数据(例如表)的现有目标实例。
如果您因现有目标实例中的额外数据而遇到问题,请清除目标实例中的数据库,然后重试迁移作业。 请参阅从现有目标实例中清除额外数据。
- 每个目标实例只能配置一个迁移作业。
- 您只能迁移到独立 Cloud SQL 实例。不支持迁移到外部服务器副本。
- 不支持将数据迁移到启用了 Private Service Connect 的 Cloud SQL 实例。
- 升级实例后,您必须开启时间点恢复。
- 如果实例具有自定义备份设置(例如自定义备份位置),则您必须在提升实例后再次自定义备份设置。在升级过程中,Cloud SQL 会将备份设置重置为默认值。
- 对于 Terraform 用户:Database Migration Service 会修改目标实例的备份和恢复设置。这可能会导致目标实例设置与您用于预配的 Terraform 配置不同。如果您遇到此问题,请按照诊断问题中的指南操作。
配额
- 在任何给定时间,最多可以存在 2000 个连接配置文件和 1000 个迁移作业。如需为更多任务腾出空间,可以删除一些迁移作业(包括已完成的作业)和连接配置文件。