Postgres 8.3 y el encoding

Bueno… ya que estamos iniciamos el foro… y tiro un problema que desconosco…

En mi notebook personal… con S.O. UBUNTU, instale PostgreSQL 8.3… pero!.. no pude establecer ningun otro encoding al crear bases exepto el que trae mi sistema operativo por defecto… alguien sabe algo?

Según tengo entendido en la versión 8.3 el encoding de la base de datos tiene que ser compatible con el LC_CTYPE del servidor.
El encoding está definido por el locale, que está fijo al momento de ejecutar initdb. Si quieres cambiar el encoding, necesitas escoger un locale que use ese encoding al ejecutar initdb.
P.e.:
initdb --locale=es_ES.utf8

Pero supongo que alguien en esta lista podrá darte algún dato más

Buenas!

Efectivamente el problema es que apartir de la versión 8.3 de postgres el encoding del cluster tiene que coincidir con el local. Para solucionar esto podes reiniciar el cluster con un encoding compatible como te sugiere “asmail” o podes cambiar el encoding del SO directamente. Hay un articulo muy interesante en la wiki de Toba: http://desarrollos2.siu.edu.ar/trac/toba/wiki/Instalacion/Encoding

Probablemente Nico haga su aporte mas tarde.

Saludos, Esteban.

Ahí actualize un poco esa página. Cualquier recomendación será bienvenida.
Los sistemas del SIU aún no están a tono con postgres 8.3 (seguimos recomendando usar postgres 8.2). Si tu idea es instalar pilaga te recomiendo consultarles sobre la versión sobre la que esta probado el sistema, asi te evitas sorpresas una vez instalado. No sólo es este tema del encoding lo que cambio de la 8.2 a la 8.3 sino que se quitaron un montón de conversiones automáticas de tipos (coerciones) lo que hace que se rompan muchas consultas SQL de los sistemas.

Ya los chicos se ocuparon un poco de aclararte el tema (jaja tema nada tranquilo, como para arrancar con todo!).

Las bases de datos que vas a crear tienen que tener un encoding compatible con el del cluster.
El cluster seguramente se te creo automáticamente tomando los valores del sistema operativo.
Lo que se recomienda es una vez instalado postgres, borrar el cluster creado por defecto y crearlo a mano con los parámetros que uno necesite usando el initdb como te dicen mas arriba o en debian podes usar el pg_createcluster (pedile ayuda para ver las distintas llaves) Ejemplo: pg_createcluster --locale=es_AR -e UTF8 --start –start-conf auto

Igualmente, como bien te aconseja seba, los sistemas del SIU tiene a la version 8.2 como la recomendada.

Por ultimo, podes tener varios cluster (incluso de distintas versiones de postgres) atendiendo por distintos puertos.

Saludos, Nico.

Hola,
Tengo instalado :
debian Lenny 5.04
postgres-8.3
El error es el siguiente al crear una base con Latin1
falló la creación de la base de datos: ERROR: la codificación LATIN1 no
coincide con la configuración regional del servidor es_AR.UTF-8 DETAIL:
La configuración regional LC_CTYPE del servidor requiere la codificación UTF8.

Estuve mirando estos links
http://desarrollos2.siu.edu.ar/trac/toba/wiki/Instalacion/Encoding

http://www.arpug.com.ar/trac/wiki/PreguntasFrecuentes#ComocrearbasesconcodificaciónLATIN1

pero sigo con el mismo problema

Graciass
Mariano

Hola Mariano,

te hago una consulta, en ambas paginas que pusiste recomienda reinicializar/re-crear el cluster… ya realizaste ese paso?.
Quizas te pueda estar faltando algun locale como se indica en la pagina de Arpug… de todas formas te deberia haber indicado dicho faltante al momento de la creacion del cluster con el locale especifico.
Si tenes alguna captura extra del momento en que creaste el cluster nos seria util.

Saludos
Richard

Gracias Richard,lo pude solucionar, comento los pasos:

reconfigurar locales, marque es_AR.ISO-8859-1

lupulo:~# dpkg-reconfigure locales

luego rebotee el SO e instale postgres

lupulo:~# apt-get install postgresql-8.3 postgresql-client-8.3 postgresql-server-dev-8.3

Inicie el cluster(reinicializar/re-crear el cluster)

lupulo:~# mkdir -p /var/pgsql/data
lupulo:~# chown postgres /var/pgsql/data
lupulo:~# su - postgres

postgres@lupulo:~$ /usr/lib/postgresql/8.3/bin/initdb -U postgres -D /var/pgsql/data

Los archivos de este cluster serán de propiedad del usuario «postgres».
Este usuario también debe ser quien ejecute el proceso servidor.
El cluster será inicializado con configuración local es_AR.
La codificación por omisión ha sido por lo tanto definida a LATIN1.
La configuración de búsqueda en texto ha sido definida a «spanish».

corrigiendo permisos en el directorio existente /var/pgsql/data … hecho
creando subdirectorios … hecho
seleccionando el valor para max_connections … 100
seleccionando el valor para shared_buffers/max_fsm_pages … 24MB/153600
creando archivos de configuración … hecho
creando base de datos template1 en /var/pgsql/data/base/1 … hecho
inicializando pg_authid … hecho
inicializando dependencias … hecho
creando las vistas de sistema … hecho
cargando las descripciones de los objetos del sistema … hecho
creando conversiones … hecho
creando directorios … hecho
estableciendo privilegios en objetos predefinidos … hecho
creando el esquema de información … hecho
haciendo vacuum a la base de datos template1 … hecho
copiando template1 a template0 … hecho
copiando template1 a postgres … hecho

ATENCIÓN: activando autentificación «trust» para conexiones locales.
Puede cambiar esto editando pg_hba.conf o usando el parámetro -A
la próxima vez que ejecute initdb.

Completado. Puede iniciar el servidor de bases de datos usando:
/usr/lib/postgresql/8.3/bin/postgres -D /var/pgsql/data
o
/usr/lib/postgresql/8.3/bin/pg_ctl -D /var/pgsql/data -l archivo_de_registro start

Saludos
Márian

Estimados, tengo un problema con el encoding en postgres 8.1.

Levante una base en utf 8, luego la cambie a latin 1 pero, por ej, los datos que ingreso nuevos con acentos o ñ se ven correctos, pero los viejos, me qdaron mal, con lso caracteres erroneos.

Existe alguna posibilidad de modificarlo para que se vean, los viejos datos, correctamente???

Desde ya gracias

Saludos

RESPECTO DEL MENSAJE ANTERIOR …

Les cuento que mirando y mirando por ahi, encontre lo siguiente:

iconv -f utf8 -t latin1 -o basealatin1.sql baseenutf8.sql

pero en cierto punto se corta y aparece el error:

iconv: error en secuencia de entrada numero xxx

Alguna sugerencia para solucionar el problema???

saludos y gracias

Bueno, finalmente la solución no era tan complicada, nos faltaba un parámetro…

iconv -c -f utf8 -t latin1 -o baseenlatin1.sql baseenutf8.sql

El c ignora algunos caracteres q no se pueden modificar en el esquema, por ej, los de tipo &#numero;

Esos si hay q modificarlos a mano mediante algun replace en la base de datos.

Saludoss