从SQL Server迁移至PostgreSQL时,添加不区分大小写COLLATION失败
解决PostgreSQL创建不区分大小写COLLATION失败的问题
错误原因
报错核心是操作系统找不到en-u-ks-primary对应的locale数据,同时你的CREATE COLLATION语句参数使用有误——针对ICU provider,PostgreSQL要求用LOCALE参数而非LC_COLLATE/LC_CTYPE。
解决方案
1. 修正CREATE COLLATION语句格式
针对ICU provider,正确的语句写法应使用LOCALE参数指定ICU locale字符串:
CREATE COLLATION main.case_insensitive_collation ( PROVIDER = icu, LOCALE = 'en-u-ks-primary', DETERMINISTIC = FALSE );
2. 安装系统缺失的ICU locale数据
Debian系统默认可能未安装完整的ICU locale包,执行以下命令补装:
sudo apt-get update && sudo apt-get install locales-all
安装完成后重新执行修正后的CREATE COLLATION语句。
3. 备选方案:使用通用不区分大小写ICU locale
若en-u-ks-primary仍无法识别,可尝试通用的跨语言不区分大小写localeund-u-ks-primary:
CREATE COLLATION main.case_insensitive_collation ( PROVIDER = icu, LOCALE = 'und-u-ks-primary', DETERMINISTIC = FALSE );
4. 验证PostgreSQL的ICU支持
确认你的PostgreSQL实例已启用ICU功能:
SELECT name, setting FROM pg_settings WHERE name = 'icu_enable';
返回结果中setting为on则表示ICU功能正常;若为off,需重新编译PostgreSQL并启用ICU支持(Debian官方发布的PostgreSQL包默认已启用)。
内容的提问来源于stack exchange,提问作者NehaS
相关产品推荐
相关产品推荐

