Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/01/2010, 10:03
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Imposible crear base de datos en cualquier codificación.

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.
Código SQL:
Ver original
  1. CREATE DATABASE enquestes;

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 original
  1. cenicafe=> CREATE DATABASE Enquestes;
  2. CREATE DATABASE
  3. cenicafe=> \l
  4.                                       Listado de base de datos
  5.   Nombre   |  Due±o   | Codificaci¾n |     Collation     |       Ctype       |      Privilegios
  6. -----------+----------+--------------+-------------------+-------------------+-----------------------
  7.  cenicafe  | postgres | LATIN1       | Spanish, Colombia | Spanish, Colombia |
  8.  enquestes | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia |
  9.  postgres  | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia |
  10.  prueba    | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia |
  11.  template0 | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia | =c/postgres
  12.                                                                              : postgres=CTc/postgres
  13.  template1 | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia | =c/postgres
  14.                                                                              : postgres=CTc/postgres
  15. (6 filas)
  16.  
  17. cenicafe=> UPDATE pg_database SET encoding=8 WHERE datname='enquestes';
  18. UPDATE 1
  19. cenicafe=> \l
  20.                                       Listado de base de datos
  21.   Nombre   |  Due±o   | Codificaci¾n |     Collation     |       Ctype       |      Privilegios
  22. -----------+----------+--------------+-------------------+-------------------+-----------------------
  23.  cenicafe  | postgres | LATIN1       | Spanish, Colombia | Spanish, Colombia |
  24.  enquestes | postgres | LATIN1       | Spanish, Colombia | Spanish, Colombia |
  25.  postgres  | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia |
  26.  prueba    | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia |
  27.  template0 | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia | =c/postgres
  28.                                                                              : postgres=CTc/postgres
  29.  template1 | postgres | UTF8         | Spanish, Colombia | Spanish, Colombia | =c/postgres
  30.                                                                              : postgres=CTc/postgres
  31. (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
__________________
Without data, You are another person with an opinion.
W. Edwads Deming