Add option to use ICU as global locale provider
commitf2553d43060edb210b36c63187d52a632448e1d2
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 17 Mar 2022 10:11:21 +0000 (17 11:11 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 17 Mar 2022 10:13:16 +0000 (17 11:13 +0100)
tree7c75fca6ad45c4c25f8b2c6d3d51fa871d2c72d8
parentf6f0db4d62400ff88f523dcc4d7e25f9506bc0d8
Add option to use ICU as global locale provider

This adds the option to use ICU as the default locale provider for
either the whole cluster or a database.  New options for initdb,
createdb, and CREATE DATABASE are used to select this.

Since some (legacy) code still uses the libc locale facilities
directly, we still need to set the libc global locale settings even if
ICU is otherwise selected.  So pg_database now has three
locale-related fields: the existing datcollate and datctype, which are
always set, and a new daticulocale, which is only set if ICU is
selected.  A similar change is made in pg_collation for consistency,
but in that case, only the libc-related fields or the ICU-related
field is set, never both.

Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/5e756dd6-0e91-d778-96fd-b1bcb06c161a%402ndquadrant.com
35 files changed:
doc/src/sgml/catalogs.sgml
doc/src/sgml/charset.sgml
doc/src/sgml/ref/create_database.sgml
doc/src/sgml/ref/createdb.sgml
doc/src/sgml/ref/initdb.sgml
src/backend/catalog/pg_collation.c
src/backend/commands/collationcmds.c
src/backend/commands/dbcommands.c
src/backend/utils/adt/pg_locale.c
src/backend/utils/init/postinit.c
src/bin/initdb/Makefile
src/bin/initdb/initdb.c
src/bin/initdb/t/001_initdb.pl
src/bin/pg_dump/pg_dump.c
src/bin/pg_upgrade/check.c
src/bin/pg_upgrade/info.c
src/bin/pg_upgrade/pg_upgrade.h
src/bin/psql/describe.c
src/bin/psql/tab-complete.c
src/bin/scripts/Makefile
src/bin/scripts/createdb.c
src/bin/scripts/t/020_createdb.pl
src/include/catalog/catversion.h
src/include/catalog/pg_collation.dat
src/include/catalog/pg_collation.h
src/include/catalog/pg_database.dat
src/include/catalog/pg_database.h
src/include/utils/pg_locale.h
src/test/Makefile
src/test/icu/.gitignore [new file with mode: 0644]
src/test/icu/Makefile [new file with mode: 0644]
src/test/icu/README [new file with mode: 0644]
src/test/icu/t/010_database.pl [new file with mode: 0644]
src/test/regress/expected/collate.icu.utf8.out
src/test/regress/sql/collate.icu.utf8.sql