你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
从 PostgreSQL 联机迁移到 Azure Database for PostgreSQL 时的已知问题/限制
重要
建议使用 Azure Database for PostgreSQL 中的新迁移服务,以获得更加简化和高效的迁移体验。 该服务通过支持各种源环境简化了流程,确保顺利过渡到 Azure Database for PostgreSQL。
以下部分描述了在从 PostgreSQL 联机迁移到 Azure Database for PostgreSQL 时存在的已知问题和限制。
联机迁移配置
源 PostgreSQL 服务器必须运行版本 9.4、9.5、9.6、10 或 11。 有关详细信息,请参阅支持的 PostgreSQL 数据库版本。
仅支持迁移到同一版本或更高版本。 例如,不支持将 PostgreSQL 9.5 迁移到 Azure Database for PostgreSQL 9.6 或 10。 不支持从 PostgreSQL 11 迁移到 PostgreSQL 9.6。
若要在源 PostgreSQL postgresql.config 文件中启用逻辑复制,请设置以下参数 :
- wal_level:设置为 logical。
- max_replication_slots:至少设置为要迁移的数据库数上限。 如果你要迁移 4 个数据库,请将值至少设置为 4。
- max_wal_senders:设置并发运行的数据库数。 建议值为 10。
将 DMS 代理 IP 添加到源 PostgreSQL pg_hba.conf。
预配 Azure 数据库迁移服务后,记下 DMS IP 地址。
将 IP 地址添加到 pg_hba.conf 文件中:
host all 172.16.136.18/10 md5 host replication postgres 172.16.136.18/10 md5
用户必须在托管源数据库的服务器上具有“复制”角色。
源数据库架构和目标数据库架构必须匹配。
大小限制
- 可以使用单个 DMS 服务将最多 1 TB 的数据从 PostgreSQL 迁移到 Azure Database for PostgreSQL。
- DMS 允许用户选择数据库中要迁移的表。
在幕后,有一个 pg_dump 命令可用于通过以下选项之一来提取选定表的转储:
- -T,表示包含 UI 中选择的表名
- -t,表示排除用户未选择的表名
在 -t 或 -T 选项后面,最多可以包含 7500 个字符作为 pg_dump 命令的一部分。 pg_dump 命令使用选定或未选定表的字符计数(以较少者为准)。 如果选定和未选定表的字符数超过 7500,则 pg_dump 命令会失败并出错。
对于前面的示例,pg_dump 命令为:
pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""
在前面的命令中,字符数为 55(包括双引号、空格、-T 和斜杠)
数据类型限制
限制:如果表中没有主键,则所做的更改可能不会同步到目标数据库。
解决方法:暂时为表设置一个主键,以便迁移能够继续。 完成数据迁移后,可以删除主键。
从 AWS RDS PostgreSQL 进行联机迁移的限制
尝试执行从 Amazon Web Service (AWS) 关系数据库 (RDS) PostgreSQL 到 Azure Database for PostgreSQL 的联机迁移时,可能会遇到以下错误:
错误:数据库“{database}”的表“{table}”中的列“{column}”的默认值在源服务器和目标服务器上不同。 在源服务器上,值为“{value on source}”,而在目标服务器上,值则为“{value on target}”。
限制:如果列架构上的默认值在源数据库和目标数据库上不同,则会出现此错误。
解决方法:确保目标上的架构与源上的架构匹配。 有关迁移架构的详细信息,请参阅 Azure Database for PostgreSQL 联机迁移文档。
错误:目标数据库“{database}”包含“{number of tables}”个表,而源数据库“{database}”包含“{number of tables}”个表。 源数据库和目标数据库中表的数目应当匹配。
限制:当源数据库与目标数据库的表数不同时,将出现此错误。
解决方法:确保目标上的架构与源上的架构匹配。 有关迁移架构的详细信息,请参阅 Azure Database for PostgreSQL 联机迁移文档。
错误: 源数据库 {database} 为空
限制:当源数据库为空时,会出现此错误。 你可能选择了错误的数据库作为源。
解决方法:反复检查选择迁移的源数据库,然后重试。
错误: 目标数据库 {database} 为空。 迁移架构。
限制:当目标数据库上没有架构时,会出现此错误。 确保目标上的架构与源上的架构匹配。
解决方法:确保目标上的架构与源上的架构匹配。 有关迁移架构的详细信息,请参阅 Azure Database for PostgreSQL 联机迁移文档。
其他限制
- 数据库名称不能包含分号 (;)。
- 已捕获的表必须包含主键。 如果某个表没有主键,则删除和更新记录操作的结果将不可预测。
- 忽略更新主键段。 应用此类更新将被目标识别为未更新任何行的更新操作。 结果是生成一条写入到异常表的记录。
- 如果表包含 JSON 列,对此表执行任何 DELETE 或 UPDATE 操作可能导致迁移失败。
- 迁移同名但大小写不同的多个表可能会导致不可预知的行为,且此操作不受支持。 例如,使用 table1、TABLE1 和 Table1。
- 不支持更改 [CREATE | ALTER | DROP | TRUNCATE] table DDL 的处理。
- 在数据库迁移服务中,单个迁移活动最多只能容纳四个数据库。
- 不支持迁移 pg_largeobject 表。