icu_ext
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
icu_ext | 1.10.0 | UTIL | PostgreSQL | C |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 4240 | icu_ext | No | Yes | No | Yes | No | Yes | - |
| Related | pgpcre pg_xenophile unaccent gzip bzip zstd http pg_net |
|---|
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| 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 | - |
Build
You can build the RPM packages for icu_ext using pig build:
pig build pkg icu_ext # build RPM packages
Install
You can install icu_ext directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install icu_ext; # Install for current active PG version
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:
CREATE EXTENSION icu_ext;
Usage
Sources: README, datetime docs, v1.10.0 release
icu_ext exposes ICU functionality to PostgreSQL. Upstream requires PostgreSQL 11+ configured with ICU (--with-icu); the pgext catalog tracks version 1.10.0 for PostgreSQL 14-18, with the v1.10.0 release noting PostgreSQL 18 compatibility.
Enable the Extension
CREATE EXTENSION icu_ext;
Version Info
SELECT icu_version(); -- ICU library version
SELECT icu_unicode_version(); -- Unicode standard version
Locale Functions
SELECT * FROM icu_locales_list() WHERE name LIKE 'es%' LIMIT 5;
SELECT icu_default_locale();
SELECT icu_set_default_locale('en');
Collation Attributes
SELECT * FROM icu_collation_attributes('fr-u-ks-level2-kn');
String Comparison
-- Case-sensitive, accent-insensitive comparison:
SELECT icu_compare('abce', 'abce', 'en-u-ks-level1-kc-true'); -- 0
SELECT icu_compare('Abce', 'abce', 'en-u-ks-level1-kc-true'); -- 1
Sort Keys and Linguistic Search
CREATE UNIQUE INDEX idx ON my_table((icu_sort_key(name, 'fr-u-ks-level1')));
SELECT icu_strpos('Jean-Rene Dupont', 'jeanrene', 'fr-u-ks-level1-ka-shifted');
SELECT icu_replace('Jean-Rene Dupont', 'jeanrene', '{firstname}', 'fr-u-ks-level1-ka-shifted');
Text Boundary Analysis
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 Normalization and Transformation
SELECT icu_normalize('text', 'NFC');
SELECT icu_is_normalized('text', 'NFC');
SELECT icu_transform('Hello', 'Latin-Cyrillic');
SELECT * FROM icu_transforms_list();
Date and Time Localization
SET icu_ext.locale TO '@calendar=buddhist';
SELECT icu_format_date('2020-12-31'::date, '{medium}', 'en@calendar=ethiopic');
SELECT icu_parse_date('25/09/2566', 'dd/MM/yyyy');
SELECT icu_format_datetime(now(), 'GGGG dd/MMMM/yyyy HH:mm:ss.SSS z', 'fr@calendar=buddhist');
The datetime docs also define icu_date, icu_timestamptz, and icu_interval, plus the icu_ext.locale, icu_ext.date_format, and icu_ext.timestamptz_format settings used for localized input/output and calendar-aware arithmetic.
Number Spellout
SELECT icu_number_spellout(42, 'en'); -- 'forty-two'
SELECT icu_number_spellout(42, 'fr'); -- 'quarante-deux'
Spoof and Confusable Detection
SELECT icu_spoof_check('paypal');
SELECT icu_confusable_strings_check('google', 'gооgle');
SELECT icu_confusable_string_skeleton('phi1');
Character Info
SELECT icu_char_name('A');
SELECT icu_char_type('A');
SELECT icu_char_ublock_id('A');
SELECT * FROM icu_unicode_blocks() WHERE block_name = 'Basic_Latin';
Caveats
- Functions that depend on ICU collation or Unicode data can change behavior when the linked ICU library changes.
icu_sort_key()is index-friendly, but indexes built on sort keys should be reviewed after ICU upgrades.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.