Thomas’ Lab Notes

Stuff worth not forgetting

Add Collation to Postgres Post-initdb

Note: this is for old Postgres installs that lack the pg_import_system_collations function.

We need to operate as user so that the new collation has the proper ownership. We connect to template1, because by default we can’t connect to template0.

$ sudo -u postgres psql -d template1

Now allow ourselves to connect to template0

template1=# UPDATE pg_database SET datallowconn = TRUE WHERE datname = 'template0';
template1=# \c template0

Create collation in the proper schema (pg_catalog). Quote collation name to preserve capitalization.

template0=# CREATE COLLATION pg_catalog."en_US" (LOCALE='en_US.utf8');

Now reset datallowconn to FALSE.

template0=# UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template0';

Now any database created from the template0 template will inherit the new collation.