icu_ext
访问ICU库提供的函数
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
icu_ext | 1.10.0 | UTIL | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4240 | icu_ext | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pgpcre pg_xenophile unaccent gzip bzip zstd http pg_net |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.10.0 | 1817161514 | icu_ext | - |
| RPM | PIGSTY | 1.10.0 | 1817161514 | icu_ext_$v | - |
| DEB | PGDG | 1.10.0 | 1817161514 | postgresql-$v-icu-ext | - |
构建
您可以使用 pig build 命令构建 icu_ext 扩展的 RPM 包:
pig build pkg icu_ext # 构建 RPM 包
安装
您可以直接安装 icu_ext 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install icu_ext; # 当前活跃 PG 版本安装
pig ext install -y icu_ext -v 18 # PG 18
pig ext install -y icu_ext -v 17 # PG 17
pig ext install -y icu_ext -v 16 # PG 16
pig ext install -y icu_ext -v 15 # PG 15
pig ext install -y icu_ext -v 14 # PG 14
dnf install -y icu_ext_18 # PG 18
dnf install -y icu_ext_17 # PG 17
dnf install -y icu_ext_16 # PG 16
dnf install -y icu_ext_15 # PG 15
dnf install -y icu_ext_14 # PG 14
apt install -y postgresql-18-icu-ext # PG 18
apt install -y postgresql-17-icu-ext # PG 17
apt install -y postgresql-16-icu-ext # PG 16
apt install -y postgresql-15-icu-ext # PG 15
apt install -y postgresql-14-icu-ext # PG 14
创建扩展:
CREATE EXTENSION icu_ext;
用法
将 ICU 功能暴露给 PostgreSQL。需要 PostgreSQL 11+ 且编译时启用了 ICU(--with-icu)。
版本信息
SELECT icu_version(); -- ICU 库版本
SELECT icu_unicode_version(); -- Unicode 标准版本
区域设置函数
SELECT * FROM icu_locales_list() WHERE name LIKE 'es%' LIMIT 5;
SELECT icu_default_locale();
SELECT icu_set_default_locale('en');
排序规则属性
SELECT * FROM icu_collation_attributes('fr-u-ks-level2-kn');
字符串比较
-- 大小写敏感、重音不敏感的比较:
SELECT icu_compare('abce', 'abce', 'en-u-ks-level1-kc-true'); -- 0
SELECT icu_compare('Abce', 'abce', 'en-u-ks-level1-kc-true'); -- 1
排序键(用于唯一索引)
CREATE UNIQUE INDEX idx ON my_table((icu_sort_key(name, 'fr-u-ks-level1')));
文本边界分析
SELECT * FROM icu_character_boundaries('Hello', 'en');
SELECT * FROM icu_word_boundaries('I like books', 'en');
SELECT * FROM icu_sentence_boundaries('Mr. Smith went home. He was tired.', 'en');
SELECT * FROM icu_line_boundaries('Long text here', 'en');
Unicode 规范化与转换
SELECT icu_normalize('text', 'NFC');
SELECT icu_is_normalized('text', 'NFC');
SELECT icu_transform('Hello', 'Latin-Cyrillic');
SELECT * FROM icu_transforms_list();
数字拼读
SELECT icu_number_spellout(42, 'en'); -- 'forty-two'
SELECT icu_number_spellout(42, 'fr'); -- 'quarante-deux'
欺骗与混淆检测
SELECT icu_spoof_check('paypal');
SELECT icu_confusable_strings_check('google', 'gооgle');
字符信息
SELECT icu_char_name('A');
SELECT icu_char_type('A');