Thread: Setting "ucs_basic" as the default database collation

Setting "ucs_basic" as the default database collation

From
Christophe Pettus
Date:
Is there a way to specify "ucs_basic" (or the other "standard collations" [1]) collation as the default database
collationat database creation time, rather than on a per-column or per-operation basis? 

[1] https://www.postgresql.org/docs/current/collation.html#COLLATION-MANAGING-STANDARD


Re: Setting "ucs_basic" as the default database collation

From
Ron Johnson
Date:
On Sun, Oct 27, 2024 at 5:32 AM Christophe Pettus <xof@thebuild.com> wrote:
Is there a way to specify "ucs_basic" (or the other "standard collations" [1]) collation as the default database collation at database creation time, rather than on a per-column or per-operation basis?

[1] https://www.postgresql.org/docs/current/collation.html#COLLATION-MANAGING-STANDARD


 
The CREATE DATABASE statement has an ENCODING option.  Does that work with 'ucs_basic'?

--
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> crustacean!

Re: Setting "ucs_basic" as the default database collation

From
Christophe Pettus
Date:

> On Oct 27, 2024, at 13:56, Ron Johnson <ronljohnsonjr@gmail.com> wrote:
>
>  The CREATE DATABASE statement has an ENCODING option.  Does that work with 'ucs_basic'?

No:

xof=# create database test encoding=ucs_basic;
ERROR:  ucs_basic is not a valid encoding name
LINE 1: create database test encoding=ucs_basic;
                             ^

Although that's not too surprising; it's a UTF-8 collation, not an encoding as such.  Experimenting with the various
otherCREATE DATABASE parameters hasn't gotten me any farther. 


Re: Setting "ucs_basic" as the default database collation

From
Tom Lane
Date:
Christophe Pettus <xof@thebuild.com> writes:
> Is there a way to specify "ucs_basic" (or the other "standard collations" [1]) collation as the default database
collationat database creation time, rather than on a per-column or per-operation basis? 

CREATE DATABASE wants you to specify a locale, which ucs_basic is not.
It's defined by SQL as a standard collation name, but that doesn't
make it a complete locale specification.  You can do something like

regression=# create database db1 with encoding = 'utf8' locale = 'en_US.utf8' template = template0;
CREATE DATABASE

or

regression=# create database db2 with encoding = 'utf8' icu_locale = 'en-US-x-icu' locale_provider = icu template =
template0;
CREATE DATABASE

or

regression=# create database db3 with encoding = 'utf8' locale = 'POSIX' template = template0;
CREATE DATABASE

            regards, tom lane