Da documentação do PostgreSQL:
Outro motivo comum para copiar template0 em vez de template1 é que novas configurações de codificação e localidade podem ser especificadas ao copiar template0, enquanto uma cópia de template1 deve usar as mesmas configurações que ela. Isso ocorre porque template1 pode conter dados específicos de codificação ou de localidade, enquanto template0 não contém.
Você pode usar apenas
template0
para criar um novo banco de dados com codificação e localidade diferentes:CREATE DATABASE newdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'zh_CN.UTF-8'
CONNECTION LIMIT = -1
TEMPLATE template0;
Isso funcionará, mas significa que todas as alterações feitas em
template1
não será aplicado ao banco de dados recém-criado. Para alterar a codificação e o agrupamento de
template1
você deve primeiro excluir template1
e, em seguida, crie um novo modelo template1
de template0
. Como descartar o banco de dados de modelo é descrito aqui. Então você pode criar um novo banco de dados template1
com a codificação/colação escolhida e marque-a como modelo definindo datistemplate=true
(exemplo):update pg_database set datistemplate=true where datname='template1';