PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como alterar a codificação da coleção de banco de dados de modelo


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';