Como crio bancos de dados Unicode no PostgreSQL 8.4?


14

Eu instalei o pacote postgresql-8.4 com opções padrão. Tudo funcionou bem, no entanto, não consigo criar bancos de dados unicode:

-- This doesn't work
createdb test1 --encoding UNICODE

-- This works
createdb test2

A mensagem de erro

createdb: database creation failed: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII) 

é um pouco intrigante porque (afaik) eu não uso um modelo para criar o novo banco de dados ou está implicitamente se referindo ao banco de dados "postgres" padrão por algum motivo?

Ou talvez esteja faltando uma configuração em um .confarquivo?

Respostas:


13

O modelo ao qual está se referindo é template1, que é implicitamente usado se você não especificar outro modelo.

A solução mais rápida é a criação de seu banco de dados template0, usando o createdb --template=template0.

Você pode descartar e reinicializar todo o cluster com um código de idioma mais sensato. Você provavelmente teve seu sistema operacional configurado para usar o código de idioma C por padrão. Você pode reinicializar o sistema de banco de dados com estas etapas:

sudo pg_dropcluster --stop 8.4 main
sudo pg_createcluster --locale=en_US.utf8 --start 8.4 main

Use qualquer local que desejar, é claro.


Soltando o cluster para modificar o local foi exatamente o que eu estava procurando, graças :)
wildpeaks

Cara, depois de muita pesquisa, era isso que a gente procurava também! Nada mais poderia fazer o PG trabalhar com o locale do Ubuntu, mesmo mudando. Mas recriar o cluster com UTF8 fez o truque :). Felicidades!
Lucasarruda

Você pode usar --locale=C.UTF-8(liste os locais suportados no seu sistema locale -a).
Tricasse

3

talvez você precise configurar o código do idioma antes para criar o cluster

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

Eu acho que funcionou para mim!
Alfonx

dpkg-reconfigure requer sudo ...
Cerin

-1

Eu acho que você quer dizer:

createdb test42 --encoding utf-8

Isso deve fazer o que você quiser.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.