miércoles, 14 de octubre de 2015

Migración de base de datos PostgresSQL con codificación SQL_ASCII a UTF8




Utilizar una consulta tipo:
 
  • SELECT * FROM pg_stat_activity where datname='basededatos'; 

Para verificar que los usuarios han sido buenos y realmente ya se han desconectado.
Si vemos conexiones que no debería haber debemos avisar a los rezagados...

Una vez comprobamos que ya tenemos la base de datos para nosotros solos continuamos.
Antes de nada hacer copia de seguridad de la original:
  • pg_dump basededatos > basededatos.sql

 
Ver codificación de la original: 

  •  file basedatos.sql
    basedatos.sql: ISO-8859 text, with very long lines
 
Hacer recode de la base de datos para transformarla a UTF-8:  
  • cat basedatos.sql | recode iso-8859-1..u8 > basedatos_utf8.sq
 
Verificar codificación de fichero transformado:
  • file basedatos_utf8.sql
    basedatos_utf8.sql: UTF-8 Unicode text, with very long lines 


Renombra la base de datos original para mantener una copia online:
  • psql
  • postgres=# alter DATABASE basedatos RENAME TO basedatosold; 
Crear la nueva base de datos con codificación utf8, por ejemplo así:
  • postgres=# CREATE DATABASE basedatos  
     WITH OWNER = postgres        
     ENCODING = 'UTF8'        
    TABLESPACE = pg_default         
    LC_COLLATE = 'es_ES.UTF-8'        
    LC_CTYPE = 'es_ES.UTF-8'        
    CONNECTION LIMIT = -1;   
    CREATE DATABASE  
    postgres=#
Editar el fichero basedatos_uft8.sql  y cambiar la línea que establece la codificación:
  • SET client_encoding = 'SQL_ASCII';
  • SET client_encoding = 'UTF8';
Importamos el volcado convertido a la nueva base de datos:
  • psql basedatos < basedatos_utf8.sql
Y todo debería estar OK!!
Como siempre comprobar y comprobar.

 


 

No hay comentarios:

Publicar un comentario

L2TP Ipsec Windows to Mikrotik eror 789

 Add this to registry REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d...