Apenas ando estudiando la teoría de las nuevas implementaciones de la versión 8.4 en cuanto a codificación.
Que creo es lo que pasa?
Al momento de instalar postresql se crean dos base de datos de administración
template0 y template1 y tanto el encoding, collation, regional configuration y otras configuraciones se pegan al servidor.
Al momento de tratar de crear una ase de datos con una codificación diferente, solicita las configuraciones regionales y colaciones acorde a la codificación que se trata de cargar.
El problema es que no he encontrado una tabla donde especifiquen los valores correctos y compatibles entre cada configuración.
La solución que realizo no es muy elegante, pero me ha salvado en un par de ocasiones.
1. crear base de datos con la configuración por defecto.
2. Cambiar la codificación valiendonos de la tabla de administración pg_database
update pg_database set encoding=6 where datname='enquestes';
3. verificar si realmente se hace el cambio de codificación listando las bases de datos con
\l.
Ejemplo:
Código SQL:
Ver originalcenicafe=> CREATE DATABASE Enquestes;
CREATE DATABASE
cenicafe=> \l
Listado de base de datos
Nombre | Due±o | Codificaci¾n | Collation | Ctype | Privilegios
-----------+----------+--------------+-------------------+-------------------+-----------------------
cenicafe | postgres | LATIN1 | Spanish, Colombia | Spanish, Colombia |
enquestes | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia |
postgres | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia |
prueba | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia |
template0 | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia | =c/postgres
: postgres=CTc/postgres
(6 filas)
cenicafe=> UPDATE pg_database SET encoding=8 WHERE datname='enquestes';
UPDATE 1
cenicafe=> \l
Listado de base de datos
Nombre | Due±o | Codificaci¾n | Collation | Ctype | Privilegios
-----------+----------+--------------+-------------------+-------------------+-----------------------
cenicafe | postgres | LATIN1 | Spanish, Colombia | Spanish, Colombia |
enquestes | postgres | LATIN1 | Spanish, Colombia | Spanish, Colombia |
postgres | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia |
prueba | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia |
template0 | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | Spanish, Colombia | Spanish, Colombia | =c/postgres
: postgres=CTc/postgres
(6 filas)
8 es el id del oncoding correspondiente a latin1. Por esta razón se hace el update con este codigo.
Posteriormente cuando listas las bases de datos nuevamente, la codificación ya es cambiada a latin1.
De esta forma no he tenido problemas.
espero haberte ayudado