SlideShare a Scribd company logo
1 of 17
Download to read offline
ICU Locale の話
Noriyoshi Shinoda
September 9, 2022
PostgreSQL Un-Conference #35
SPEAKER
篠田典良(しのだのりよし)
– 所属
– 日本ヒューレット・パッカード合同会社
– 現在の業務
– PostgreSQL をはじめ Oracle Database, Microsoft SQL Server, Vertica 等 RDBMS 全般に関するシステムの
設計、移行、チューニング、コンサルティング
– Oracle ACE (2009 年 4 月~)
– オープンソース製品に関する調査、検証
– PostgreSQL 15 に対して
– ドキュメントの修正などのパッチ(8件)
– 関連する URL
– 「PostgreSQL 虎の巻」シリーズ
–http://h30507.www3.hp.com/t5/user/viewprofilepage/user-id/838802
– Oracle ACE ってどんな人?
–http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838335-ja.html
1
SPEAKER
篠田典良(しのだのりよし)
– PostgreSQL Unconference #15 (2020年9月30日)
– 検知できない破壊の話
– PostgreSQL Unconference #20 (2021年2月2日)
– プロセス障害の話
– PostgreSQL Unconference #29 (2021年12月21日)
– 文字コードの話
– PostgreSQL Unconference #31 (2022年2月22日)
– Babelfish の話
– PostgreSQL Unconference #35 (2022年9月9日)
– ICU Locale の話
– スライドはこちら
– https://www.slideshare.net/noriyoshishinoda
– https://github.com/nori-shinoda/documents/blob/main/README.md
2
PostgreSQL 15 新機能
ロケール・プロバイダを選択可能に
– ロケール機能の提供ライブラリについて ICU と LIBC を選択できる
– 文字コードは UTF-8 で検証
3
postgres=# CREATE DATABASE dblibc1 LOCALE_PROVIDER=libc LC_COLLATE='ja_JP.utf8'
LC_CTYPE='ja_JP.utf8' TEMPLATE=template0;
CREATE DATABASE
postgres=# CREATE DATABASE dbicu1 LOCALE_PROVIDER=icu ICU_LOCALE='ja-JP'
TEMPLATE=template0;
CREATE DATABASE
$ initdb -D data.libc --locale-provider=libc --locale=ja_JP.utf8 --encoding=utf8
$ initdb -D data.icu --locale-provider=icu --icu-locale=ja-JP --encoding=utf8
Locale Provider のデフォルト設定
データベース単位の設定
PostgreSQL 15 新機能
ロケール指定パラメーター
– CREATE DATABASE 文で指定する項目とパラメーター
4
設定項目 LIBC パラメーター ICU パラメーター 備考
ロケール・プロバイダ LOCALE_PROVIDER データベース作成時に決定
ロケール LOCALE ICU_LOCALE データベース作成時に決定
ソート順 LC_COLLATE - データベース作成時に決定
文字の分類 LC_CTYPE - データベース作成時に決定
バージョン情報 COLLATION_VERSION データベース作成時に決定・更新可
メッセージの言語 LC_MESSAGES 変更可能(初期値は initdbで決定)
通貨型の表示 LC_MONETARY 変更可能(初期値は initdbで決定)
数字の書式 LC_NUMERIC 変更可能(初期値は initdbで決定)
日時の書式 LC_TIME 変更可能(初期値は initdbで決定)
PostgreSQL 15 新機能
ICU ロケールのチェック
– ICU ロケール名や COLLATION バージョンの存在はチェックされていない?
5
postgres=# CREATE DATABASE dbbad1 LOCALE_PROVIDER=icu ICU_LOCALE=INVALIDNAME
COLLATION_VERSION='INVALIDVERSION' TEMPLATE=template0;
CREATE DATABASE
$ initdb -D data.icu2 --locale-provider=icu --icu-locale=INVALIDNAME --encoding=utf8
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with this locale configuration:
provider: icu
ICU locale: INVALIDNAME
…
PostgreSQL 15 新機能
ICU ロケールのチェック
– COLLATION バージョン間違いは接続時に警告が出力される。
6
$ psql dbbad1 postgres
WARNING: database "dbbad1" has a collation version mismatch
DETAIL: The database was created using collation version INVALIDVERSION, but the operating
system provides version 153.80.
HINT: Rebuild all objects in this database that use the default collation and run ALTER
DATABASE dbbad1 REFRESH COLLATION VERSION, or build PostgreSQL with the right library
version.
psql (15beta4)
Type "help" for help.
dbbad1=# ALTER DATABASE dbbad1 REFRESH COLLATION VERSION;
NOTICE: changing version from INVALIDVERSION to 153.80
ALTER DATABASE
ロケールの設定
money型の表示
– GUC 設定 lc_monetary に依存する(LIBC / ICU共通)
7
postgres=> SET lc_monetary = 'ja_JP';
SET
postgres=> SELECT 1000::money;
money
---------
¥1,000
(1 row)
postgres=> SET lc_monetary='en_GB';
SET
postgres=> SELECT 1000::money;
money
-----------
£1,000.00
(1 row)
日本語ロケールの機能
ICU / LIBC 共通
– 全角アルファベットに対する upper / lower / initcap 関数の実行
– LIBC / ICU ロケール共通機能
8
dbicu1=> SELECT upper('半角:a'), upper('全角:a');
upper | upper
---------+----------
半角:A | 全角:A
(1 row)
dbicu1=> SELECT lower('半角:A'), lower('全角:A');
lower | lower
---------+----------
半角:a | 全角:a
(1 row)
日本語ロケールの機能
ICU / LIBC 共通
– 全角アルファベットに対する ILIKE 句の実行
– LIBC / ICU ロケール共通機能
9
dbicu1=> SELECT * FROM data1 WHERE c2 ILIKE 'A%'; -- 全角 A
c1 | c2
----+----
19 | A
21 | a
(2 rows)
dbicu1=> SELECT * FROM data1 WHERE c2 ILIKE 'A%'; -- 半角 A
c1 | c2
----+----
3 | A
5 | a
(2 rows)
日本語ロケールの機能
ソート順(LIBC ja_JP ロケール)
– C ロケール(= No Locale)と LIBC ja_JP ロケールの違い
– 1バイト文字 < 半角カナ < 全角(数字 < アルファベット < ひらがな < カタカナ) の順
– 同じカテゴリー内はほぼバイナリ順と同じ
10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1 2 A B a b あ い は ば ぱ ア イ ハ バ パ 1 2 A B a b ア イ
1 2 3 4 5 6 23 24 17 18 19 20 21 22 7 8 9 10 11 12 13 14 15 16
1 2 A B a b ア イ 1 2 A B a b あ い は ば ぱ ア イ ハ バ パ
凡例
1バイト
全角
半角カナ
C locale
LIBC locale
小⇚ ⇛大
日本語ロケールの機能
ソート順(ICU ja-JP ロケール)
11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1 2 A B a b あ い は ば ぱ ア イ ハ バ パ 1 2 A B a b ア イ
1 17 2 18 5 21 3 19 6 22 4 20 7 12 23 8 13 24 9 14 10 15 11 16
1 1 2 2 a a A A b b B B あ ア ア い イ イ は ハ ば バ ぱ パ
– C ロケールと ICU ja-JP ロケールの違い
– 数字 < アルファベット < かな順
– 同じカテゴリー内は 半角 < 全角 < ひらがな < カタカナ < 半角カナ
C locale
ICU locale
凡例
1バイト
全角
半角カナ
小⇚ ⇛大
そもそも
ロケール機能を推奨しない理由
– LIKE 句による前方一致でインデックスが使えない
– C ロケールによる検索
12
postgres=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%';
QUERY PLAN
--------------------------------------------------------------------------------
Index Scan using idx1_data1 on data1 (cost=0.42..21.42 rows=100 width=10)
Index Cond: (((c2)::text >= '10000'::text) AND ((c2)::text < '10001'::text))
Filter: ((c2)::text ~~ '10000%'::text)
(3 rows)
dblibc1=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%';
QUERY PLAN
------------------------------------------------------------
Seq Scan on data1 (cost=0.00..17905.00 rows=100 width=10)
Filter: ((c2)::text ~~ '10000%'::text)
(2 rows)
– LIBC ja_JP ロケールによる検索
そもそも
ロケール機能を推奨しない理由
– インデックス作成時に {データ型} _pattern_ops 演算子クラスを指定することで回避可能
13
dblibc1=> CREATE INDEX idx1_data1 ON data1(c2 varchar_pattern_ops);
CREATE INDEX
dblibc1=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%';
QUERY PLAN
------------------------------------------------------------------------------------
Index Scan using idx1_data1 on data1 (cost=0.42..8.45 rows=100 width=10)
Index Cond: (((c2)::text ~>=~ '10000'::text) AND ((c2)::text ~<~ '10001'::text))
Filter: ((c2)::text ~~ '10000%'::text)
(3 rows)
– この場合不等号「<」「>」による範囲検索でインデックス検索が行えなくなる
– 残念ながらこれらの制約は ICU ロケールでも改善されていない
列単位でソート順を指定
CREATE TABLE 文
– 例) LIBC の場合 ja_JP COLLATION を指定
14
postgres=> CREATE TABLE data1 (c1 INT, c2 VARCHAR(10) COLLATE "ja_JP");
CREATE TABLE
– pg_collation カタログの collname 列に含まれる値を指定する
– ロケール指定時と同じ制約が発生
– 例) ICU の場合 ja-JP-x-icu COLLATION を指定
postgres=> CREATE TABLE data1 (c1 INT, c2 VARCHAR(10) COLLATE "ja-JP-x-icu");
CREATE TABLE
まとめ
LIBC ロケールと ICU ロケールの違い
– CREATE DATABASE 文では ICU ロケール名やバージョンのチェックが不十分
– ソート順以外は LIBC ロケールと ICU ロケールに違いは無さそう
– ロケール無しと比較すると LIBC と ICU で同じ制約がある
– ソート順を決めたい時は CREATE TABLE 文の COLLATE 句を指定で十分か?
15
THANK YOU
Mail: noriyoshi.shinoda@hpe.com
Twitter: @nori_shinoda

More Related Content

What's hot

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)Takeshi Mikami
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 

What's hot (20)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Vacuum徹底解説
Vacuum徹底解説Vacuum徹底解説
Vacuum徹底解説
 

Similar to PostgreSQL Unconference #5 ICU Collation

[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付きInsight Technology, Inc.
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -歩 柴田
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Noriyoshi Shinoda
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12Toshi Harada
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...Insight Technology, Inc.
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5Toshi Harada
 
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...Insight Technology, Inc.
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...Insight Technology, Inc.
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New FeaturesNoriyoshi Shinoda
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~ryouta watabe
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureRyota Watabe
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)yoyamasaki
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!歩 柴田
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10Toshi Harada
 

Similar to PostgreSQL Unconference #5 ICU Collation (20)

[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
Bind Peek をもっと使おうぜ!(柴田 歩) - JPOUG Advent Calendar 2014(Day 5) -
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1Oracle Database Connect 2017 / JPOUG#1
Oracle Database Connect 2017 / JPOUG#1
 
20190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg1220190518 27th-chugoku db-lt-pg12
20190518 27th-chugoku db-lt-pg12
 
Babelfish Compatibility
Babelfish CompatibilityBabelfish Compatibility
Babelfish Compatibility
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
 
KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5KOF2015 PostgreSQL 9.5
KOF2015 PostgreSQL 9.5
 
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
[db tech showcase Tokyo 2016] A32: Oracle脳で考えるSQL Server運用 by 株式会社インサイトテクノロジー...
 
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
[db tech showcase Tokyo 2014] D21: Postgres Plus Advanced Serverはここが使える&9.4新機...
 
db tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Featuresdb tech showcase 2019 D10 Oracle Database New Features
db tech showcase 2019 D10 Oracle Database New Features
 
プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~プロとしてのOracleアーキテクチャ入門 ~番外編~
プロとしてのOracleアーキテクチャ入門 ~番外編~
 
Introduction of Oracle Database Architecture
Introduction of Oracle Database ArchitectureIntroduction of Oracle Database Architecture
Introduction of Oracle Database Architecture
 
MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)MySQL 5.7 InnoDB 日本語全文検索(その2)
MySQL 5.7 InnoDB 日本語全文検索(その2)
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!V$SQLとその周辺でER図を描いてみよう!
V$SQLとその周辺でER図を描いてみよう!
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 

More from Noriyoshi Shinoda

PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSNoriyoshi Shinoda
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10Noriyoshi Shinoda
 
Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)Noriyoshi Shinoda
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLNoriyoshi Shinoda
 
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)Noriyoshi Shinoda
 
PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)Noriyoshi Shinoda
 
Add PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseAdd PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseNoriyoshi Shinoda
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GAPostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GANoriyoshi Shinoda
 
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)Noriyoshi Shinoda
 
PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)Noriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Noriyoshi Shinoda
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Noriyoshi Shinoda
 
PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)Noriyoshi Shinoda
 
PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)Noriyoshi Shinoda
 
PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)Noriyoshi Shinoda
 
PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)Noriyoshi Shinoda
 
PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)Noriyoshi Shinoda
 
PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)Noriyoshi Shinoda
 

More from Noriyoshi Shinoda (20)

PostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVSPostgreSQL Unconference #29 Unicode IVS
PostgreSQL Unconference #29 Unicode IVS
 
PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10PostgreSQL Conference Japan 2021 B2 Citus 10
PostgreSQL Conference Japan 2021 B2 Citus 10
 
Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)Citus 10 verification result (Japanese)
Citus 10 verification result (Japanese)
 
PostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQLPostgreSQL Unconference #26 No Error on PostgreSQL
PostgreSQL Unconference #26 No Error on PostgreSQL
 
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)PostgreSQL 14 Beta1 New Features with Examples (Japanese)
PostgreSQL 14 Beta1 New Features with Examples (Japanese)
 
PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)PostgreSQL 14 Beta 1 New Features with Examples (English)
PostgreSQL 14 Beta 1 New Features with Examples (English)
 
Add PLEASE clause to Oracle Database
Add PLEASE clause to Oracle DatabaseAdd PLEASE clause to Oracle Database
Add PLEASE clause to Oracle Database
 
PostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GAPostgreSQL 12 New Features with Examples (English) GA
PostgreSQL 12 New Features with Examples (English) GA
 
EDB Postgres Vision 2019
EDB Postgres Vision 2019 EDB Postgres Vision 2019
EDB Postgres Vision 2019
 
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)PostgreSQL 12 Beta 1 New Features  with Examples (Japanese)
PostgreSQL 12 Beta 1 New Features with Examples (Japanese)
 
PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)PostgreSQL 12 Beta 1 New Features with Examples (English)
PostgreSQL 12 Beta 1 New Features with Examples (English)
 
Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)Let's scale-out PostgreSQL using Citus (Japanese)
Let's scale-out PostgreSQL using Citus (Japanese)
 
Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)
 
PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)PostgreSQL 11 New Features With Examples (Japanese)
PostgreSQL 11 New Features With Examples (Japanese)
 
PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)PostgreSQL 11 New Features With Examples (English)
PostgreSQL 11 New Features With Examples (English)
 
Citus 7.5 Beta 検証結果
Citus 7.5 Beta 検証結果Citus 7.5 Beta 検証結果
Citus 7.5 Beta 検証結果
 
PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)PostgreSQL 11 New Features Japanese version (Beta 1)
PostgreSQL 11 New Features Japanese version (Beta 1)
 
PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)PostgreSQL 11 New Features English version (Beta 1)
PostgreSQL 11 New Features English version (Beta 1)
 
PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)PGConf.ASIA 2017 Logical Replication Internals (English)
PGConf.ASIA 2017 Logical Replication Internals (English)
 
PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)PostgreSQL 10 New Features (English)
PostgreSQL 10 New Features (English)
 

Recently uploaded

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Recently uploaded (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

PostgreSQL Unconference #5 ICU Collation

  • 1. ICU Locale の話 Noriyoshi Shinoda September 9, 2022 PostgreSQL Un-Conference #35
  • 2. SPEAKER 篠田典良(しのだのりよし) – 所属 – 日本ヒューレット・パッカード合同会社 – 現在の業務 – PostgreSQL をはじめ Oracle Database, Microsoft SQL Server, Vertica 等 RDBMS 全般に関するシステムの 設計、移行、チューニング、コンサルティング – Oracle ACE (2009 年 4 月~) – オープンソース製品に関する調査、検証 – PostgreSQL 15 に対して – ドキュメントの修正などのパッチ(8件) – 関連する URL – 「PostgreSQL 虎の巻」シリーズ –http://h30507.www3.hp.com/t5/user/viewprofilepage/user-id/838802 – Oracle ACE ってどんな人? –http://www.oracle.com/technetwork/jp/database/articles/vivadeveloper/index-1838335-ja.html 1
  • 3. SPEAKER 篠田典良(しのだのりよし) – PostgreSQL Unconference #15 (2020年9月30日) – 検知できない破壊の話 – PostgreSQL Unconference #20 (2021年2月2日) – プロセス障害の話 – PostgreSQL Unconference #29 (2021年12月21日) – 文字コードの話 – PostgreSQL Unconference #31 (2022年2月22日) – Babelfish の話 – PostgreSQL Unconference #35 (2022年9月9日) – ICU Locale の話 – スライドはこちら – https://www.slideshare.net/noriyoshishinoda – https://github.com/nori-shinoda/documents/blob/main/README.md 2
  • 4. PostgreSQL 15 新機能 ロケール・プロバイダを選択可能に – ロケール機能の提供ライブラリについて ICU と LIBC を選択できる – 文字コードは UTF-8 で検証 3 postgres=# CREATE DATABASE dblibc1 LOCALE_PROVIDER=libc LC_COLLATE='ja_JP.utf8' LC_CTYPE='ja_JP.utf8' TEMPLATE=template0; CREATE DATABASE postgres=# CREATE DATABASE dbicu1 LOCALE_PROVIDER=icu ICU_LOCALE='ja-JP' TEMPLATE=template0; CREATE DATABASE $ initdb -D data.libc --locale-provider=libc --locale=ja_JP.utf8 --encoding=utf8 $ initdb -D data.icu --locale-provider=icu --icu-locale=ja-JP --encoding=utf8 Locale Provider のデフォルト設定 データベース単位の設定
  • 5. PostgreSQL 15 新機能 ロケール指定パラメーター – CREATE DATABASE 文で指定する項目とパラメーター 4 設定項目 LIBC パラメーター ICU パラメーター 備考 ロケール・プロバイダ LOCALE_PROVIDER データベース作成時に決定 ロケール LOCALE ICU_LOCALE データベース作成時に決定 ソート順 LC_COLLATE - データベース作成時に決定 文字の分類 LC_CTYPE - データベース作成時に決定 バージョン情報 COLLATION_VERSION データベース作成時に決定・更新可 メッセージの言語 LC_MESSAGES 変更可能(初期値は initdbで決定) 通貨型の表示 LC_MONETARY 変更可能(初期値は initdbで決定) 数字の書式 LC_NUMERIC 変更可能(初期値は initdbで決定) 日時の書式 LC_TIME 変更可能(初期値は initdbで決定)
  • 6. PostgreSQL 15 新機能 ICU ロケールのチェック – ICU ロケール名や COLLATION バージョンの存在はチェックされていない? 5 postgres=# CREATE DATABASE dbbad1 LOCALE_PROVIDER=icu ICU_LOCALE=INVALIDNAME COLLATION_VERSION='INVALIDVERSION' TEMPLATE=template0; CREATE DATABASE $ initdb -D data.icu2 --locale-provider=icu --icu-locale=INVALIDNAME --encoding=utf8 The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with this locale configuration: provider: icu ICU locale: INVALIDNAME …
  • 7. PostgreSQL 15 新機能 ICU ロケールのチェック – COLLATION バージョン間違いは接続時に警告が出力される。 6 $ psql dbbad1 postgres WARNING: database "dbbad1" has a collation version mismatch DETAIL: The database was created using collation version INVALIDVERSION, but the operating system provides version 153.80. HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE dbbad1 REFRESH COLLATION VERSION, or build PostgreSQL with the right library version. psql (15beta4) Type "help" for help. dbbad1=# ALTER DATABASE dbbad1 REFRESH COLLATION VERSION; NOTICE: changing version from INVALIDVERSION to 153.80 ALTER DATABASE
  • 8. ロケールの設定 money型の表示 – GUC 設定 lc_monetary に依存する(LIBC / ICU共通) 7 postgres=> SET lc_monetary = 'ja_JP'; SET postgres=> SELECT 1000::money; money --------- ¥1,000 (1 row) postgres=> SET lc_monetary='en_GB'; SET postgres=> SELECT 1000::money; money ----------- £1,000.00 (1 row)
  • 9. 日本語ロケールの機能 ICU / LIBC 共通 – 全角アルファベットに対する upper / lower / initcap 関数の実行 – LIBC / ICU ロケール共通機能 8 dbicu1=> SELECT upper('半角:a'), upper('全角:a'); upper | upper ---------+---------- 半角:A | 全角:A (1 row) dbicu1=> SELECT lower('半角:A'), lower('全角:A'); lower | lower ---------+---------- 半角:a | 全角:a (1 row)
  • 10. 日本語ロケールの機能 ICU / LIBC 共通 – 全角アルファベットに対する ILIKE 句の実行 – LIBC / ICU ロケール共通機能 9 dbicu1=> SELECT * FROM data1 WHERE c2 ILIKE 'A%'; -- 全角 A c1 | c2 ----+---- 19 | A 21 | a (2 rows) dbicu1=> SELECT * FROM data1 WHERE c2 ILIKE 'A%'; -- 半角 A c1 | c2 ----+---- 3 | A 5 | a (2 rows)
  • 11. 日本語ロケールの機能 ソート順(LIBC ja_JP ロケール) – C ロケール(= No Locale)と LIBC ja_JP ロケールの違い – 1バイト文字 < 半角カナ < 全角(数字 < アルファベット < ひらがな < カタカナ) の順 – 同じカテゴリー内はほぼバイナリ順と同じ 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 A B a b あ い は ば ぱ ア イ ハ バ パ 1 2 A B a b ア イ 1 2 3 4 5 6 23 24 17 18 19 20 21 22 7 8 9 10 11 12 13 14 15 16 1 2 A B a b ア イ 1 2 A B a b あ い は ば ぱ ア イ ハ バ パ 凡例 1バイト 全角 半角カナ C locale LIBC locale 小⇚ ⇛大
  • 12. 日本語ロケールの機能 ソート順(ICU ja-JP ロケール) 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 A B a b あ い は ば ぱ ア イ ハ バ パ 1 2 A B a b ア イ 1 17 2 18 5 21 3 19 6 22 4 20 7 12 23 8 13 24 9 14 10 15 11 16 1 1 2 2 a a A A b b B B あ ア ア い イ イ は ハ ば バ ぱ パ – C ロケールと ICU ja-JP ロケールの違い – 数字 < アルファベット < かな順 – 同じカテゴリー内は 半角 < 全角 < ひらがな < カタカナ < 半角カナ C locale ICU locale 凡例 1バイト 全角 半角カナ 小⇚ ⇛大
  • 13. そもそも ロケール機能を推奨しない理由 – LIKE 句による前方一致でインデックスが使えない – C ロケールによる検索 12 postgres=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%'; QUERY PLAN -------------------------------------------------------------------------------- Index Scan using idx1_data1 on data1 (cost=0.42..21.42 rows=100 width=10) Index Cond: (((c2)::text >= '10000'::text) AND ((c2)::text < '10001'::text)) Filter: ((c2)::text ~~ '10000%'::text) (3 rows) dblibc1=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%'; QUERY PLAN ------------------------------------------------------------ Seq Scan on data1 (cost=0.00..17905.00 rows=100 width=10) Filter: ((c2)::text ~~ '10000%'::text) (2 rows) – LIBC ja_JP ロケールによる検索
  • 14. そもそも ロケール機能を推奨しない理由 – インデックス作成時に {データ型} _pattern_ops 演算子クラスを指定することで回避可能 13 dblibc1=> CREATE INDEX idx1_data1 ON data1(c2 varchar_pattern_ops); CREATE INDEX dblibc1=> EXPLAIN SELECT * FROM data1 WHERE c2 LIKE '10000%'; QUERY PLAN ------------------------------------------------------------------------------------ Index Scan using idx1_data1 on data1 (cost=0.42..8.45 rows=100 width=10) Index Cond: (((c2)::text ~>=~ '10000'::text) AND ((c2)::text ~<~ '10001'::text)) Filter: ((c2)::text ~~ '10000%'::text) (3 rows) – この場合不等号「<」「>」による範囲検索でインデックス検索が行えなくなる – 残念ながらこれらの制約は ICU ロケールでも改善されていない
  • 15. 列単位でソート順を指定 CREATE TABLE 文 – 例) LIBC の場合 ja_JP COLLATION を指定 14 postgres=> CREATE TABLE data1 (c1 INT, c2 VARCHAR(10) COLLATE "ja_JP"); CREATE TABLE – pg_collation カタログの collname 列に含まれる値を指定する – ロケール指定時と同じ制約が発生 – 例) ICU の場合 ja-JP-x-icu COLLATION を指定 postgres=> CREATE TABLE data1 (c1 INT, c2 VARCHAR(10) COLLATE "ja-JP-x-icu"); CREATE TABLE
  • 16. まとめ LIBC ロケールと ICU ロケールの違い – CREATE DATABASE 文では ICU ロケール名やバージョンのチェックが不十分 – ソート順以外は LIBC ロケールと ICU ロケールに違いは無さそう – ロケール無しと比較すると LIBC と ICU で同じ制約がある – ソート順を決めたい時は CREATE TABLE 文の COLLATE 句を指定で十分か? 15