PolarDB PostgreSQL版支持不同内核版本之间以及不同产品系列之间的大版本升级,整个过程中将自动为您创建目标版本的PolarDB集群,并从源集群同步数据。升级后的PolarDB PostgreSQL版集群包含源PolarDB PostgreSQL版集群的账号信息、数据库信息、IP白名单和必要的参数。
内核版本升级,例如:
PolarDB PostgreSQL版11升级至PolarDB PostgreSQL版14、15、16或17。
PolarDB PostgreSQL版14升级至PolarDB PostgreSQL版15、16或17。
产品系列升级:
标准版升级至企业版。
具体的升级操作请参见升级步骤。
迁移方式
大版本升级采用逻辑迁移(DTS数据同步)的方式进行迁移,通过数据传输服务DTS,创建数据同步任务,将源PolarDB PostgreSQL版的库表结构和全量数据同步至创建的PolarDB PostgreSQL版集群中,然后保持增量数据同步。
方案优势
可保留数据库原来的连接地址,无需修改应用程序的任何连接配置即可切换至目标版本。
迁移完全免费,仅收取目标PolarDB集群的费用。
迁移过程数据0丢失。
支持增量迁移,停机时间小于10分钟。
支持在线热升级,升级过程仅闪断一次(即当业务从源端切换至目标端时)。
支持回滚操作,升级失败可以在10分钟内恢复。
适用范围
如果源PolarDB PostgreSQL版创建了触发器,请先删除触发器,再继续迁移。
如果源PolarDB PostgreSQL版开启了SSL链路加密或设置透明数据加密TDE,则不支持大版本升级。
使用须知
为确保升级过程顺利,请您仔细阅读并遵循以下说明。
源集群影响
性能开销:数据同步会增加源集群的读负载,建议在业务低峰期执行升级操作。
WAL日志要求:
源集群的
wal_level参数值需为logical。为确保数据同步任务的稳定,建议在全量同步阶段将WAL日志保留时间设置为7天以上,增量同步阶段设置为24小时以上。WAL日志保留时间不足可能导致任务失败,极端情况下甚至可能会导致数据不一致或丢失。
长时间未提交的事务(长事务)可能会导致WAL日志堆积,占用大量存储空间。请在升级前关注并处理源集群的长事务。
临时对象创建:
DTS会在源集群的
publicschema下创建若干临时表(如public.dts_pg_class、public.dts_pg_attribute、public.dts_pg_type、public.dts_pg_enum、public.dts_postgres_heartbeat、public.dts_ddl_command、public.dts_args_session等),用于同步数据和记录心跳信息。在同步期间,请勿删除源库中的临时表,否则会导致DTS任务异常。临时表会在DTS实例释放后自动删除。DTS会在源集群创建名前缀为
dts_sync_的复制槽(Replication Slot)。DTS会每隔120分钟自动清理一次历史复制槽,避免其持续累积占用磁盘空间。说明DTS释放实例后会主动删除该复制槽,如果您在同步期间修改了数据库密码,或者删除了DTS的访问IP白名单,则会导致该复制槽无法自动删除,此时需要您在源库中手动删除,避免其持续累积占用磁盘空间导致源集群不可用。
当释放同步任务或同步失败时,DTS会主动清理该复制槽。如果源集群发生了主备切换,则需要您登录备库来手动清理,以防WAL日志持续堆积。
请勿手动删除这些临时表和复制槽,否则将导致升级任务失败。任务结束后,系统会自动清理这些对象。
使用限制
升级期间的禁止操作:
禁止对源集群执行参数设置操作。
禁止变更源集群的可用区或连接地址。
大版本升级期间,系统将在目标PolarDB集群自动创建一个格式为
dts_clone%的迁移账号,密码随机生成。升级期间,请勿修改账号密码或删除账号,否则将导致DTS同步失败。完成迁移后您可以按需修改账号密码或者删除账号。禁止通过DTS以外的任何方式向目标集群写入数据,否则将导致数据不一致。
说明如果除DTS以外的数据没有写入目标库,您可以使用数据管理DMS(Data Management)来执行在线DDL变更,请参见通过无锁变更工单实现无锁结构变更。
功能与对象限制:
不支持跨地域升级。
待同步的表需具有主键或唯一约束,否则可能导致数据重复。
DTS仅校验数据内容,不校验Sequence等数据库对象的元数据。
暂不支持全球数据库网络(GDN)中的集群进行大版本升级。
如果在待同步的Schema中创建了新的表或使用
RENAME命令重建了待同步的表,您需要在对该表写入数据前执行ALTER TABLE schema.table REPLICA IDENTITY FULL;命令,以保障该表数据同步的一致性。执行该命令期间,建议您不要有锁表操作,否则会导致表锁死。建议您在业务低峰期进行操作。
DDL操作限制:仅支持同步部分DDL操作:
操作类型
SQL语句
DML
INSERT、UPDATE、DELETE
DDL
CREATE TABLE、DROP TABLE
ALTER TABLE(包括RENAME TABLE、ADD COLUMN、ADD COLUMN DEFAULT、ALTER COLUMN TYPE、DROP COLUMN、ADD CONSTRAINT、ADD CONSTRAINT CHECK、ALTER COLUMN DROP DEFAULT)
TRUNCATE TABLE(源库PostgreSQL为PostgreSQL 11及以上版本)
CREATE INDEX ON TABLE
重要不支持同步DDL中包含的附加信息,如
CASCADE或RESTRICT等。不支持同步使用
SET session_replication_role = replica命令的会话中的DDL。若源库单次提交的多条SQL中同时包含DML和DDL,则该DDL不会被同步。
若源库单次提交的多条SQL中包含非同步对象的DDL,则该DDL不会被同步。
升级后的检查与操作
手动更新Sequence:DTS不会同步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; $$;目标集群空间:由于全量数据写入时会产生表碎片,升级后目标集群的表空间占用会比源集群更大,这属于正常现象。
收费规则
您除了需承担购买PolarDB集群的费用之外,还需承担DTS所创建的同步任务产生的费用。但现阶段该功能处于试用阶段,创建的同步任务30天内不收取任何费用。具体如下:
迁移对象 | 费用 |
库表结构同步和全量数据同步 | 创建同步任务后,30天内不收取任何费用。 超过30天后,将会取消创建的同步任务,因此也不会产生费用。 说明 您可以登录PolarDB控制台,在基本信息页面的PolarDB升级功能区域查看任务的剩余时间。 |
增量数据同步 |
带地址切换
PolarDB集群之间的升级支持带地址切换,系统会自动交换源集群和目标集群上的连接地址。连接地址对应关系图如下所示:
使用带地址切换功能时,需注意以下几点:
带地址切换只会切换源集群和目标集群的域名,Vswitch和Vip等配置不会切换。
仅当源集群和目标集群同时存在连接地址才支持相互切换,默认情况下仅私网地址支持带地址切换。
说明若源集群的连接地址申请了公网地址,则您需要在目标集群的相应连接地址上申请公网地址,以确保在地址切换功能中能够成功切换相关连接地址上的公网地址。
选择带地址切换时,源集群和目标集群的主地址一定会切换,可以选择不切换或切换多组。
如需切换其他连接地址,您需在切换前创建好对应的连接地址,否则不会切换。关于如何为PolarDB集群创建连接地址,请参见。
带地址切换不会切换端口,请确保源集群和目标集群的连接端口一致(PolarDB默认使用的端口号为5432)。
切换域名后,可能会存在DNS解析缓存问题,在缓存过期时间内可能会出现连接不上数据库或数据库只支持读操作而无法执行写入操作等情况,建议您刷新一下服务器的DNS缓存。