Azure弹性服务器PostgreSQL迁移遇UTF8排序规则匹配失败问题咨询
PostgreSQL迁移至Azure弹性服务器问题解答
UTF8与utf8是否相同?
在PostgreSQL中,en_GB.UTF8和en_GB.utf8本质是同一个排序规则——PostgreSQL对排序规则名称的大小写不敏感,你能在目标服务器用en_GB.UTF8创建数据库,就证明底层这两个名称指向的是同一个排序规则实体。迁移工具报错仅仅是因为它做了严格的大小写字符串匹配,没有识别到二者是同一个对象。
是否需要放弃门户迁移选项改用dump/restore?
不需要直接放弃门户迁移,可优先尝试以下两种低成本方案:
- 统一源库排序规则名称大小写:在源虚拟机的PostgreSQL中执行:
修改后重新发起迁移验证,即可绕过大小写匹配问题。ALTER DATABASE xxxxxx COLLATE "en_GB.utf8"; - 在目标服务器创建排序规则别名:如果源库无法修改,可在Azure弹性服务器上执行:
为小写的排序规则创建一个大写名称的别名,让迁移工具能找到匹配的条目。CREATE COLLATION "en_GB.UTF8" FROM "en_GB.utf8";
如果上述方案均无法生效,再考虑使用dump/restore方式迁移:
- 用pg_dump导出源数据库:
pg_dump -d xxxxxx -F c -f db_dump.dump - 在目标Azure弹性服务器创建使用
en_GB.utf8的数据库 - 用pg_restore完成恢复:
pg_restore -d target_db db_dump.dump
内容的提问来源于stack exchange,提问作者DNA
相关产品推荐
相关产品推荐

