Erro de locale entre o sistema operacional e o Postgresql

image_pdfimage_print
psql: FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE "en_US", which is not recognized by setlocale().
HINT: Recreate the database with another locale or install the missing locale.
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] FATAL: database locale is incompatible with operating system\nDETAIL: The database was initialized with LC_COLLATE "en_US", which is not recognized by setlocale().\nHINT: Recreate the database with another locale or install the missing locale.' in

Os erros acima indicam existir erro entre o locale do seu sistema operacional e o PostgreSQL.

Devem existir outras soluções para este problema, mas iremos tratar de duas formas:

A primeira, quando o locale do seu sistema operacional está errado. Desta forma, será necessário que altere para o locale correto. Verifique se o problema foi resolvido.

Caso não, aplique também a solução abaixo.

A segunda, quando o locale errado é o do banco de dados, uma das formas que encontramos de solucionar foi exportar a base, efetuar sua conversão para o formato desejado e em seguida, recriar a base de dados indicando o tipo correto de locale desejado.

A conversão da exportação pode ser feito utilizando o programa iconv (Utilize somente em exportações SQL), no Linux.
Exemplo:

iconv -f=<charset_origem> -t=<charset_destino> -o=<arquivo_convertido_de_saída> <arquivo_de_entrada>

Para criar uma base de dados forçando o tipo, será necessário verificar se o comando CREATE DATABASE tem a opção ENCODING UTF8, como no exemplo abaixo:

CREATE DATABASE drall ENCODING ‘UTF8’;

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!