全部产品
Search
文档中心

数据传输服务 DTS:迁移时源库为PostgreSQL的注意事项及限制

更新时间:Dec 08, 2023

如果迁移的源数据库类型为PostgreSQL,如自建PostgreSQL、RDS PostgreSQL,您需要在配置具体的迁移任务前,参考本文的注意事项及限制,以保障数据迁移任务的正常运行。

源库为PostgreSQL的迁移方案概览

根据迁移方案,查看迁移任务的注意事项及限制:

PostgreSQL间的迁移

  • RDS PostgreSQL间的迁移

    类型

    说明

    源库限制

    • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

      待迁移的数据库名称中间不能包含短划线(-),例如dts-testdata。

    • 如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。

    • 如需进行增量迁移,WAL日志:

      • 需开启,即设置wal_level参数的值为logical

      • 如为增量迁移任务,DTS要求源数据库的WAL日志保存24小时以上,如为全量迁移和增量迁移任务,DTS要求源数据库的WAL日志至少保留7天以上(您可在全量迁移完成后将WAL日志保存时间设置为24小时以上),否则DTS可能因无法获取WAL日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

    • 源库的操作限制:

      • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务会失败。

      • 如仅执行全量数据迁移,请勿向源库中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择结构迁移、全量数据迁移和增量数据迁移。

    • 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。

    其他限制

    • 为保障迁移任务的正常进行,避免主备切换导致的逻辑订阅中断,需要RDS PostgreSQL支持并开启Logical Replication Slot Failover,设置方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)

    • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

    • 增量数据迁移期间,如果迁移对象的选择粒度为Schema,在待迁移的Schema中创建了新的表或使用RENAME命令重建了待迁移的表,您需要在对该表写入数据前执行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令。

      说明

      将上述命令中的schematable替换成真实的Schema名和表名。

    • DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。

    • 由于业务切换到目标端后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,在源库中查询对应Sequence的最大值,然后在目标库中将其作为对应Sequence的初始值。查询源库Sequence值的相关命令如下:

      do language plpgsql $$
      declare
        nsp name;
        rel name;
        val int8;
      begin
        for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
        loop
          execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
          raise notice '%',
          format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
        end loop;
      end;
      $$;
    • DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在迁移期间,请勿删除源库中的临时表,否则会导致DTS任务异常。临时表会在DTS实例释放后自动删除。

      public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_session

    • 若为全量迁移或增量迁移任务,且源数据库中要迁移的表包含外键、触发器、事件触发器,如果目标库账号为高权限账号或者super权限账号,全量或增量迁移时DTS会以Session级别暂时将session_replication_role的参数值设置为replica;如果目标库账号没有该权限,您需要手动将目标数据库中session_replication_role的参数值设置为replica。在此期间(全量迁移或增量迁移过程中session_replication_role的参数值为replica),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS迁移任务释放后,您可以将session_replication_role的参数值改回origin。

    • 为保障增量数据迁移延迟时间展示的准确性,DTS会在源库中新增一个名为dts_postgres_heartbeat的心跳表。

    • 增量数据迁移期间,DTS会在源库中创建前缀为dts_sync_的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。

      说明
      • DTS释放实例后会主动删除该replication slot,如果您在迁移期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该replication slot无法自动删除,此时需要您在源库手动删除,避免其持续累积占用磁盘空间导致RDS PostgreSQL实例不可用。

      • 当释放迁移任务或迁移失败时,DTS会主动清理该replication slot;如果RDS PostgreSQL发生了主备切换,则需要您登录备库来手动清理。

    • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。

    • 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。

    • 请确认DTS对数据类型为FLOAT或DOUBLE的列的迁移精度是否符合业务预期。DTS会通过ROUND(COLUMN,PRECISION)来读取这两类列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位。

    • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

    特殊情况

    当源实例为RDS PostgreSQL时,迁移期间,请勿修改RDS PostgreSQL的连接地址和可用区,否则会导致迁移失败。

  • 自建PostgreSQL迁移至RDS PostgreSQL

    类型

    说明

    源库限制

    • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

    • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

      待迁移的数据库名称中间不能包含短划线(-),例如dts-testdata。

    • 如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。

    • DTS不支持迁移源库中的临时表、系统内部的触发器(TRIGGER)、部分函数(关于PROCEDURE与FUNCTION的C语言函数和内部函数);DTS支持迁移的自定参数TYPE为COMPOSITE、ENUM或RANGE,支持迁移的约束为主键、外键、唯一、CHECK约束。

    • 如需进行增量迁移,WAL日志:

      • 需开启,即设置wal_level参数的值为logical

      • 如为增量迁移任务,DTS要求源数据库的WAL日志保存24小时以上,如为全量迁移和增量迁移任务,DTS要求源数据库的WAL日志至少保留7天以上(您可在全量迁移完成后将WAL日志保存时间设置为24小时以上),否则DTS可能因无法获取WAL日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

    • 源库的操作限制:

      • 如自建PostgreSQL进行主备切换,会导致迁移失败。

      • 在库表结构迁移和全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务会失败。

    • 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。

    其他限制

    • 由于源库的主备节点可能存在延迟导致数据不一致,执行数据迁移时请使用源库的主节点作为迁移的数据源。

    • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

    • 增量数据迁移期间,如果迁移对象的选择粒度为Schema,在待迁移的Schema中创建了新的表或使用RENAME命令重建了待迁移的表,您需要在对该表写入数据前执行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令。

      说明

      将上述命令中的schematable替换成真实的Schema名和表名。

    • DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。

    • 由于业务切换到目标端后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,在源库中查询对应Sequence的最大值,然后在目标库中将其作为对应Sequence的初始值。查询源库Sequence值的相关命令如下:

      do language plpgsql $$
      declare
        nsp name;
        rel name;
        val int8;
      begin
        for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
        loop
          execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
          raise notice '%',
          format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
        end loop;
      end;
      $$;
    • DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在迁移期间,请勿删除源库中的临时表,否则会导致DTS任务异常。临时表会在DTS实例释放后自动删除。

      public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_session

    • 为保障增量数据迁移延迟时间展示的准确性,DTS会在源库中新增一个名为dts_postgres_heartbeat的心跳表。

    • 增量数据迁移期间,DTS会在源库中创建前缀为dts_sync_的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。

      说明

      当释放迁移任务或迁移失败时,DTS会主动清理该replication slot;如果RDS PostgreSQL发生了主备切换,则需要您登录备库来手动清理。

      Amazon slot查询信息

    • 若为全量迁移或增量迁移任务,且源数据库中要迁移的表包含外键、触发器、事件触发器,如果目标库账号为高权限账号或者super权限账号,全量或增量迁移时DTS会以Session级别暂时将session_replication_role的参数值设置为replica;如果目标库账号没有该权限,您需要手动将目标数据库中session_replication_role的参数值设置为replica。在此期间(全量迁移或增量迁移过程中session_replication_role的参数值为replica),若源库存在级联更新、删除操作,则可能会导致数据不一致。在DTS迁移任务释放后,您可以将session_replication_role的参数值改回origin。

    • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。

    • 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。

    • 请确认DTS对数据类型为FLOAT或DOUBLE的列的迁移精度是否符合业务预期。DTS会通过ROUND(COLUMN,PRECISION)来读取这两类列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位。

    • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

    特殊情况

    • 当源实例为自建PostgreSQL时,需要确保max_wal_senders和max_replication_slots的参数值,均大于当前数据库复制槽已使用数与需要以该自建PostgreSQL为源创建的DTS实例数的总和。

    • 当源实例为Google Cloud Platform Cloud SQL for PostgreSQL时,源库的数据库账号需填入具有cloudsqlsuperuer权限的账号。在选择迁移对象时需选择此账号有权限管理的对象,或者给此账号添加目标对象的Owner权限。

      说明

      具有cloudsqlsuperuer权限的账号,无法管理Owner为其他cloudsqlsuperuer权限账号的数据。

PostgreSQL迁移至MySQL

具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    待迁移的数据库名称中间不能包含短划线(-),例如dts-testdata。

  • 如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。

  • 如需进行增量迁移,WAL日志:

    • 需开启,即设置wal_level参数的值为logical

    • 如为增量迁移任务,DTS要求源数据库的WAL日志保存24小时以上,如为全量迁移和增量迁移任务,DTS要求源数据库的WAL日志至少保留7天以上(您可在全量迁移完成后将WAL日志保存时间设置为24小时以上),否则DTS可能因无法获取WAL日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 源库的操作限制:

    • 如自建PostgreSQL进行主备切换,会导致迁移失败。

    • 为保障迁移任务的正常进行,避免主备切换导致的逻辑订阅中断,需要RDS PostgreSQL支持并开启Logical Replication Slot Failover,设置方式,请参见逻辑复制槽故障转移(Logical Replication Slot Failover)

    • 在全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务会失败。

    • 如仅执行全量数据迁移,请勿向源库中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择全量数据迁移和增量数据迁移。

  • 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。

其他限制

  • 暂不支持结构迁移,在配置迁移任务前,您需要在目标实例中创建对应的库和表。

  • 若目标库的DDL写入失败,DTS任务会继续运行,您需要在任务日志中查看执行失败的DDL。查看任务日志的方法,请参见查询任务日志

  • 若您将列名仅大小写不同的字段写入到目标MySQL数据库的同一个表中,可能会因为MySQL数据库列名大小写不敏感,导致迁移结果不符合预期。

  • 在数据迁移完成后,建议使用analyze table <表名>命令检查数据是否已写入目标表。例如,在MySQL触发HA切换机制后,可能会导致数据只写到了内存,从而造成数据丢失。

  • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

  • 增量数据迁移期间,如果迁移对象的选择粒度为Schema,在待迁移的Schema中创建了新的表或使用RENAME命令重建了待迁移的表,您需要在对该表写入数据前执行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令。

    说明

    将上述命令中的schematable替换成真实的Schema名和表名。

  • DTS会在源库中创建以下临时表,用于获取增量数据的DDL(不会将该DDL写入到目标库)、增量表的结构、心跳信息等。在迁移期间,请勿删除源库中的临时表,否则会导致DTS任务异常。临时表会在DTS实例释放后自动删除。

    public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_session

  • 为保障增量数据迁移延迟时间展示的准确性,DTS会在源库中新增一个名为dts_postgres_heartbeat的心跳表。

  • 增量数据迁移期间,DTS会在源库中创建前缀为dts_sync_的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。

    说明
    • DTS释放实例后会主动删除该replication slot,如果您在迁移期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该replication slot无法自动删除,此时需要您在源库手动删除,避免其持续累积占用磁盘空间导致RDS PostgreSQL实例不可用。

    • 当释放迁移任务或迁移失败时,DTS会主动清理该replication slot;如果RDS PostgreSQL发生了主备切换,则需要您登录备库来手动清理。

  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。

  • 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。

  • 请确认DTS对数据类型为FLOAT或DOUBLE的列的迁移精度是否符合业务预期。DTS会通过ROUND(COLUMN,PRECISION)来读取这两类列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位。

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

特殊情况

  • 当源实例为RDS PostgreSQL时,迁移期间,请勿修改RDS PostgreSQL的连接地址和可用区,否则会导致迁移失败。

  • 当源实例为自建PostgreSQL时,需要确保max_wal_senders和max_replication_slots的参数值,均大于当前数据库复制槽已使用数与需要以该自建PostgreSQL为源创建的DTS实例数的总和。

  • 当源实例为Google Cloud Platform Cloud SQL for PostgreSQL时,源库的数据库账号需填入具有cloudsqlsuperuer权限的账号。在选择迁移对象时需选择此账号有权限管理的对象,或者给此账号添加目标对象的Owner权限。

    说明

    具有cloudsqlsuperuer权限的账号,无法管理Owner为其他cloudsqlsuperuer权限账号的数据。

  • 当目标实例为RDS MySQL时,DTS会自动在RDS MySQL中创建数据库,如果待迁移的数据库名称不符合RDS MySQL的定义规范,您需要在配置迁移任务之前在RDS MySQL中创建数据库。相关操作,请参见创建数据库

PostgreSQL迁移至PolarDB PostgreSQL版(兼容Oracle)

具体注意事项及限制如下:

类型

说明

源库限制

  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移速率。

  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致目标数据库中出现重复数据。

    待迁移的数据库名称中间不能包含短划线(-),例如dts-testdata。

  • 如迁移对象为表级别,且需进行编辑(如表列名映射),则单次迁移任务仅支持迁移至多1000张表。当超出数量限制,任务提交后会显示请求报错,此时建议您拆分待迁移的表,分批配置多个任务,或者配置整库的迁移任务。

  • 如需进行增量迁移,WAL日志:

    • 需开启,即设置wal_level参数的值为logical

    • 如为增量迁移任务,DTS要求源数据库的WAL日志保存24小时以上,如为全量迁移和增量迁移任务,DTS要求源数据库的WAL日志至少保留7天以上(您可在全量迁移完成后将WAL日志保存时间设置为24小时以上),否则DTS可能因无法获取WAL日志而导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。由于您所设置的WAL日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。

  • 源库的操作限制:

    • 如自建PostgreSQL进行主备切换,会导致迁移失败。

    • 在全量迁移阶段,请勿执行库或表结构变更的DDL操作,否则数据迁移任务会失败。

    • 如仅执行全量数据迁移,请勿向源库中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议选择全量数据迁移和增量数据迁移。

  • 若源库有长事务,且实例包含增量迁移任务,则可能会导致源库长事务提交前的预写日志WAL(Write-Ahead Logging)无法清理而堆积,从而造成源库磁盘空间不足。

其他限制

  • 暂不支持结构迁移,在配置迁移任务前,您需要在目标实例中创建对应的库和表。

  • 增量数据迁移期间,如果迁移对象的选择粒度为Schema,在待迁移的Schema中创建了新的表或使用RENAME命令重建了待迁移的表,您需要在对该表写入数据前执行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令。

    说明

    将上述命令中的schematable替换成真实的Schema名和表名。

  • DTS会在源库中创建以下临时表,用于获取增量数据的DDL、增量表的结构、心跳信息等。在迁移期间,请勿删除源库中的临时表,否则会导致DTS任务异常。临时表会在DTS实例释放后自动删除。

    public.dts_pg_classpublic.dts_pg_attributepublic.dts_pg_typepublic.dts_pg_enumpublic.dts_postgres_heartbeatpublic.dts_ddl_commandpublic.dts_args_session

  • 为保障增量数据迁移延迟时间展示的准确性,DTS会在源库中新增一个名为dts_postgres_heartbeat的心跳表。

  • 增量数据迁移期间,DTS会在源库中创建前缀为dts_sync_的replication slot用于复制数据。通过该replication slot,DTS可以获取源库15分钟内的增量日志。

    说明

    当释放迁移任务或迁移失败时,DTS会主动清理该replication slot;如果RDS PostgreSQL发生了主备切换,则需要您登录备库来手动清理。

    Amazon slot查询信息

  • 单个数据迁移任务只能迁移一个数据库,如需迁移多个数据库,您需要为每个数据库配置数据迁移任务。

  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时DTS占用源和目标库一定读写资源,可能会导致数据库的负载上升。

  • 由于全量数据迁移会并发执行INSERT操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标库的表存储空间会比源库的表存储空间大。

  • 请确认DTS对数据类型为FLOAT或DOUBLE的列的迁移精度是否符合业务预期。DTS会通过ROUND(COLUMN,PRECISION)来读取这两类列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位。

  • DTS会尝试恢复七天之内迁移失败任务。因此业务切换至目标实例前,请务必结束或释放该任务,或者将DTS访问目标实例账号的写权限用revoke命令回收掉。避免该任务被自动恢复后,源端数据覆盖目标实例的数据。

  • DTS的校验对象为数据内容,暂不支持Sequence等元数据的校验,您需要自行校验。

  • 由于业务切换到目标端后,新写入的Sequence不会按照源库的Sequence最大值作为初始值去递增,您需要在业务切换前,在源库中查询对应Sequence的最大值,然后在目标库中将其作为对应Sequence的初始值。查询源库Sequence值的相关命令如下:

    do language plpgsql $$
    declare
      nsp name;
      rel name;
      val int8;
    begin
      for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
      loop
        execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
        raise notice '%',
        format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
      end loop;
    end;
    $$;

特殊情况

  • 当源实例为RDS PostgreSQL时,迁移期间,请勿修改RDS PostgreSQL的连接地址和可用区,否则会导致迁移失败。

  • 当源实例为Google Cloud Platform Cloud SQL for PostgreSQL时,源库的数据库账号需填入具有cloudsqlsuperuer权限的账号。在选择迁移对象时需选择此账号有权限管理的对象,或者给此账号添加目标对象的Owner权限。

    说明

    具有cloudsqlsuperuer权限的账号,无法管理Owner为其他cloudsqlsuperuer权限账号的数据。

  • 当源实例为自建PostgreSQL时,需要确保max_wal_senders和max_replication_slots的参数值,均大于当前数据库复制槽已使用数与需要以该自建PostgreSQL为源创建的DTS实例数的总和。