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

Como você altera a codificação de caracteres de um banco de dados postgres?


Em primeiro lugar, a resposta de Daniel é a opção correta e segura.

Para o caso específico de mudar de SQL_ASCII para outra coisa, você pode trapacear e simplesmente cutucar o catálogo pg_database para reatribuir a codificação do banco de dados. Isso pressupõe que você já armazenou caracteres não ASCII na codificação esperada (ou que simplesmente não usou caracteres não ASCII).

Então você pode fazer:
update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'thedb'

Isso não mudará o agrupamento do banco de dados, apenas como os bytes codificados são convertidos em caracteres (então agora length('£123') retornará 4 em vez de 5). Se o banco de dados usar o agrupamento 'C', não deve haver nenhuma alteração na ordenação das strings ASCII. Você provavelmente precisará reconstruir quaisquer índices que contenham caracteres não ASCII.

Adverte emptor. O despejo e o recarregamento fornecem uma maneira de verificar se o conteúdo do banco de dados está realmente na codificação que você espera, e isso não acontece. E se você tiver alguns dados codificados incorretamente no banco de dados, o resgate será difícil. Então, se você puder, despeje e reinicialize.