云数据库 PostgreSQL 物理迁移发起任务前检查项具体如下:
一、连接 DB 检查
具体检查详情、原因及修复方法请参考 连接 DB 检查。
二、版本检查
源实例和目标实例的大版本需要保持一致,且目标实例的内核版本不能低于以下版本。
| 大版本 | 内核版本 |
| 10 | v10.17_r1.5 |
| 11 | v11.12_r1.5 |
| 12 | v12.7_r1.5 |
| 13 | v13.3_r1.4 |
| 14 | v14.2_r1.11 |
| 15 | v15.1_r1.4 |
| 16 | v16.0_r1.2 |
四、检查详情
源实例迁移账号需要拥有 LOGIN、REPLICATION 权限。
源实例 pg_hba.conf 文件配置需要满足系统要求。
五、修复方法
请按照检查要求中的对应权限要求对用户进行授权,然后重新执行校验任务。
给账号 XXXX 增加 LOGIN 权限语句为 alter user XXXX login;给账号增加 REPLICATION 权限的语句为 alter user XXXX replication;
另外,如果迁移任务报错类似如下 connect source with replication failed: pq: no pg_hba.conf entry for replication connection from host "xx.xx.xxx.xx", user "xxx",说明源实例 pg_hba.conf 文件配置不满足迁移要求,可以在源实例 pg_hba.conf 文件中增加host replication all 0.0.0.0/0 md5配置后重启实例或者执行select pg_reload_conf();重新加载配置即可。
七、检查详情
检查目标实例是否为空。
注意:说明:
注意:目标实例可以有用户新建的数据库账号,但是不能有创建好的 database 或者对象。
八、修复方法
需要删除目标实例上已经存在的 database 或者对象。
十、检查详情
源实例 uid = 10 的用户名下有数据库对象会告警。
十一、修复方法
将 uid = 10 的用户名下的数据库对象更改 owner 为其他客户。
十三、检查详情
目标实例磁盘空间需要大于源端实例的磁盘占用空间大小的110%,否则会报错。
十四、修复方法
对目标端进行磁盘空间扩容,具体请参考 调整实例配置。
十六、检查详情
·源实例 wal_level 必须改为 replica 或者 logical。
·源和目标实例的 block_size 必须相同。
·PostgreSQL13以下版本实例,源实例 wal_keep_segments 必须大于或等于256。
·PostgreSQL13及以上版本,源实例 wal_keep_size/wal_segment_size 的值必须大于或等于256。
·源和目标实例的 wal_block_size 必须相同。
·源和目标实例的 segment_size 必须相同。
·目标实例的 max_connections 必须大于或等于源实例的 max_connections 。
·目标实例的 max_wal_senders 必须大于或等于源端的 max_wal_senders 。
·目标实例的 max_worker_processes 必须大于或等于源端的 max_worker_processes 。
十七、修复方法
需要按照检查详情中的要求来对应修改源或者目标实例的参数。
十九、检查详情
检查源实例安装的插件是否在目标实例支持的插件列表,如果不在,则系统报错。同时,如果源实例插件版本跟目标实例插件版本不一致,则系统发布警告。
20、修复方法
通过安装插件或者升级插件版本来保证源和目标实例的插件保持一致。
22、检查详情
原则上源和目标实例参数值需要保持一致,当系统检测到源和目标端参数值不一致时,通常的处理方式是使用目标实例的参数值并不提醒用户。不同处理方式的为如下几个参数:
| 参数名 | 迁移默认处理方式 | 校验动作 |
| data_checksums | 使用源实例参数值 | 参数值不一致时不提醒 |
| enable_partitionwise_aggregate | 使用源实例参数值 | 参数值不一致时不提醒 |
| enable_partitionwise_join | 使用源实例参数值 | 参数值不一致时不提醒 |
| lc_ctype | 使用源实例参数值 | 参数值不一致时不提醒 |
| max_locks_per_transaction | 使用源实例参数值 | 参数值不一致时不提醒 |
| max_prepared_transactions | 使用源实例参数值 | 参数值不一致时不提醒 |
| random_page_cost | 使用源实例参数值 | 参数值不一致时不提醒 |
| max_connections | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_wal_senders | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_worker_processes | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| array_nulls | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| authentication_timeout | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_analyze_scale_factor | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_analyze_threshold | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_freeze_max_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_multixact_freeze_max_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_naptime | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_cost_delay | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_cost_limit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_insert_scale_factor | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_insert_threshold | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_scale_factor | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| autovacuum_vacuum_threshold | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| bytea_output | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| check_function_bodies | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| constraint_exclusion | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| cursor_tuple_fraction | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| DateStyle | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| deadlock_timeout | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| default_statistics_target | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| default_transaction_isolation | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| exit_on_error | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| extra_float_digits | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| from_collapse_limit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_effort | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_generations | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_pool_size | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_seed | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_selection_bias | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| geqo_threshold | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| idle_in_transaction_session_timeout | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| idle_session_timeout | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| IntervalStyle | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| jit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| jit_above_cost | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| jit_inline_above_cost | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| jit_optimize_above_cost | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| join_collapse_limit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| lc_monetary | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| lc_numeric | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| lc_time | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| local_preload_libraries | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| log_filename | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_logical_replication_workers | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_parallel_workers | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_replication_slots | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_standby_archive_delay | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| max_standby_streaming_delay | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| recursive_worktable_factor | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| search_path | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| statement_timeout | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| stats_fetch_consistency | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| TimeZone | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_cost_delay | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_cost_limit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_cost_page_dirty | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_cost_page_hit | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_cost_page_miss | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_freeze_min_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_freeze_table_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_multixact_freeze_min_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| vacuum_multixact_freeze_table_age | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
| wal_level | 使用目标实例参数值 | 参数值不一致时提醒用户修改,如未修改,则采用迁移默认处理方式 |
23、修复方法
请按照实际需要修改参数值。
25、检查详情
·目标实例不能开启 TDE 数据加密。
·目标实例可以有只读组但不能有关联的只读实例。
·目标实例当前不允许有用户连接。
注意:进行物理迁移时,需要保证源实例不是加密实例。
26、修复方法
暂不支持 TDE 实例和只读实例。
28、检查详情
检查源和目标实例 GLIBC 版本兼容问题。
注意:说明:
注意:GLIBC 2.28版本 UTF8 部分字符排序规则发生变化,版本不兼容时,数据排序规则不同,存在排序结果不符合预期的风险。
29、修复方法
升级 GLIBC 版本。