Estou tentando definir o agrupamento para um novo banco de dados no PostgreSQL 13, mas parece não surtir efeito:
postgres=# CREATE DATABASE assets ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'en_US.UTF-8';
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
assets | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
Como posso fazer com que o novo banco de dados reflita minhas alterações de agrupamento?
A
CREATE DATABASE
instrução na pergunta copiará o novo banco de dados detemplate1
, o banco de dados de modelo padrão, cujoLC_COLLATE
éen_US.UTF-8
. Como o novo banco de dados deseja umC
agrupamento, normalmente a criação do banco de dados deve falhar com este erro:Isso ocorre porque o Postgres não sabe se esse
template1
banco de dados contém objetos (índices, principalmente) que dependem deen_US.UTF-8
ordenação de strings. Se ele o copiasse cegamente para um novo banco de dados com oC
agrupamento, esses índices seriam corrompidos.Além do fato de que você não recebeu essa mensagem de erro (o que parece muito estranho), o conselho na seção HINT do erro é o que você precisa: adicione
TEMPLATE 'template0'
às opções deCREATE DATABASE
.template0
, ao contrário detemplate1
, não pode ser preenchido com conteúdo personalizado, portanto, é garantido que contém apenas dados compatíveis com qualquer agrupamento e codificação suportados pelo Postgres.