Publicidad

viernes, 10 de junio de 2016

Solucion de Error PostgreSQL Encoding Latin en lugar de UTF-8 y Unable to Login en Odoo


Cambiar Codificación Latin -> UTF-8 PostgreSQL & Odoo




    Este Error me causo conflicto al tratar de crear una Maquina Virtual para migrar una instancia de Odoo al instalar las dependencias que necesita este maravilloso ERP, el motor de Base de Datos (PostgreSQL) y por ultimo restablecer la Base de Datos, me di cuenta que no podía acceder a la base restablecida en la parte web me arrojaba el error "Unable to Login" y en el archivo log una serie de errores relacionados con los accesos a la base de datos.

Primero verifique mis bases de Datos con el comando:

sudo su postgres

psql -l


Veriamos algo similar a:

         Name            |   Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
----------------------------+-----------+----------+-------------+-------------+-----------------------
 Mi_Base_Odoo               | odoo      | LATIN1     | LATIN1 | LATIN1 | 
 postgres                   | postgres  | LATIN1     | LATIN1 | LATIN1 | 
 template0                  | postgres  | LATIN1     | LATIN1 | LATIN1 | =c/postgres          +
                            |           |          |             |             | postgres=CTc/postgres
 template1                  | postgres  | LATIN1     | LATIN1 | LATIN1 | =c/postgres          +


Este fue el problema principal por el que no podia acceder a mi Base de Datos, la solución fue cambiar la encodificación de la base principal de postgres y template1.

Ejecutaremos esta seria de comandos en la terminal de PostgreSQL, que básicamente creara nuevamente la base principal de postgresq Template1:

sudo su postgres
psql
update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'
lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;
update pg_database set datistemplate=true where datname='template1';

Si nos muestra error en_US, instalamos:
locale-gen en_US.UTF-8 
Cambiamos el encoding de nuestra base postgres:

update pg_database set encoding=6 where datname='postgres';

Si necesitan conocer mas acerca de como asignar la codificación dejo esta imagen:



Ahora borramos y restauramos nuestra base de Datos y esta tendrá la codificación correcta.

En Ubuntu también debemos asignar Correctamente la codificación unicode.

1. Ejecutamos el comando que generara archivos locales con la codificación Unicode:

update pg_database set encoding=6 where datname='postgres';

2. Actualizamos el archivo /etc/default/locale con los valores correctos (o usamos update-locale LANG=xx LC_CTYPE=xx ...), si optamos por actualizar el archivo tendremos que poner estos cambios:

 $ sudo cat - > /etc/default/locale <<EOF
 LANG=en_US.UTF-8
 LANGUAGE=
 LC_CTYPE="en_US.UTF-8"
 LC_NUMERIC="en_US.UTF-8"
 LC_TIME="en_US.UTF-8"
 LC_COLLATE="en_US.UTF-8"
 LC_MONETARY="en_US.UTF-8"
 LC_MESSAGES="en_US.UTF-8"
 LC_PAPER="en_US.UTF-8"
 LC_NAME="en_US.UTF-8"
 LC_ADDRESS="en_US.UTF-8"
 LC_TELEPHONE="en_US.UTF-8"
 LC_MEASUREMENT="en_US.UTF-8"
 LC_IDENTIFICATION="en_US.UTF-8"
 LC_ALL=en_US.UTF-8
 EOF

Reiniciamos nuestro servidor Odoo y podemos trabajar de forma correcta.

1 comentario:

  1. update pg_database set encoding=pg_char_to_encoding('UTF8') where datname='postgres';

    ResponderBorrar