Foros de CHW > Software > Bases de Datos
Recuperar Clave
Registrarse FAQ/Ayuda Posts de hoy Tags


Estás leyendo el thread [miniguía] Pasar una base PSQL de SQL_ASCII a UTF8  en el foro Bases de Datos, que dice: "En mi (ahora ex-) pega tuve que realizar este proceso para un cliente, y hay "

 




Tags: Ninguna

  Iniciar discusión  
 
LinkBack Herramientas
Antiguo 24-ago-2010, 23:34
WannyTiggah
The Kitty
 
WannyTiggah
 
Registrado: agosto-2010
Posts: 78
WannyTiggah no tiene una reputación buena ni mala


 
[miniguía] Pasar una base PSQL de SQL_ASCII a UTF8

En mi (ahora ex-) pega tuve que realizar este proceso para un cliente, y hay que decir que hay super poca documentación al respecto. De hecho en español no encontré nada.
Es por eso que decidí plasmar aqui la guía que realicé allá, para conocimiento de todos
___________________________________________

Primero que todo, debo aclarar:
- este procedimiento lo realicé por completo en PostgreSQL 8.4. Hay un paso que por alguna razón no se puede realizar en PSQL 8.2 (cambiar el nombre directamente de la BD, al menos no desde el pgAdmin)
- estos pasos fueron probados integramente en entorno Windows (lo probé en Windows 2003 Server y Windows 7), pero en la plataforma *nix es casi la misma historia (no sé si hay pgAdmin para Linux)

- He de creer que esto se da por asumido, pero para efectos de seguridad, realizar este proceso cuando no haya ningún usuario trabajando en la base de datos.
____________________________________________

Pues bien, de lleno a la guía:

1.- Descargar la aplicación iconv e instalarla

1.5- Para efectos de comodidad, copiar todo el contenido de la carpeta bin de iconv a la carpeta bin de los ejecutables de PostgreSQL

2.- Desde una ventana de CMD ir a la ruta de los ejecutables de PSQL.
Aquí se va a realizar un respaldo de la base de datos que se desea convertir. Para eso, escribir el siguiente comando:

Code:
pg_dump -U <usuario> -W  PSQLDB > respaldo.dmp
Con esto, se forzará el que pida el password del usuario que se especifique (usualmente "postgres"), y se creará el respaldo de la base "PSQLDB" en el archivo "respaldo.dmp".
Cabe mencionar que no aparecerá ningún indicador de que el proceso ha sido efectuado correctamente, más que volver al prompt.

3.- Ahora viene lo interesante: Realizar la conversión como tal. Es aquí donde entra en acción la aplicación iconv (se copiaron los archivos a la carpeta de PostgreSQL para no tener que estar trasladando el respaldo a cada rato).
Entonces, escribir el siguiente comando

Code:
iconv -f ISO8859-1 -t UTF-8 respaldo.dmp > respaldo8.dmp
Con este comando se convertirá el archivo respaldo.dmp de la codificación ISO8859-1 (que es la más común al momento de ingresar datos, a menos que se ingresen caracteres foráneos como japoneses/coreanos o que se yo) a la UTF-8, y dejándolo en un nuevo archivo llamado respaldo8.dmp.
Nuevamente, no saldrá nada que indique que la conversión fue realizada exitosamente. Hay que asumir que sí.

4.- Para efectos de archivo (y en caso que ocurra algún incidente), yo prefiero siempre importar el respaldo en una base nueva. Entonces, desde el pgAdmin crear una base de datos y dejarla altiro con la codificación UTF-8. Ejemplo: Base8

5.- Finalmente se importará el archivo convertido en la base recién creada.
Para eso, escribir el siguiente comando:

Code:
psql -U <usuario> -W Base8 < respaldo8.dmp
Con este comando, nuevamente se forzará la solicitud de contraseña para el usuario especificado, y posteriormente se subirá el contenido de respaldo8.dmp a la base de datos Base8,
Aquí se verán correr varios procesos (primero los create table, luego los insert, luego los create index...), hasta que finalmente se vuelva al prompt. Este proceso variará en duración según el tamaño de la base de datos y el poder del servidor de la BD.

Una vez realizado todo esto, la base de datos Base8 tendrá el contenido de PSQLDB, pero con codificación UTF-8

6.- (opcional) En caso que la aplicación o servicio que utilice la base de datos apunte a un nombre específico, no queda más que intercambiar nombres. Ejemplo, que PSQLDB se llame PSQLDB_backup y así Base8 pase a llamarse PSQLDB

Editado por WannyTiggah en 24-ago-2010 a las 23:43.
WannyTiggah está fuera de línea   Citar y responder
Recuerda que no verás este banner una vez que te registres

Antiguo 25-ago-2010, 01:21
unreal4u
Zend Certified Engineer
ex-admin :)

 
unreal4u
 
Registrado: octubre-2005
Ubicación: Eindhoven, The Netherlands
Posts: 12.229
unreal4u goza de buena reputación


Re: [miniguía] Pasar una base PSQL de SQL_ASCII a UTF8

uh que buena guía, está clarísima, gracias !

Pregunta::: en pg_dump no existe algún parámetro que te permita ahorrarte todo esto y pasarlo al tiro a UTF-8?

Lo otro: al crear la nueva DB, no se olviden de colocarle el nuevo charset:

Code:
CREATE DATABASE Base8 ENCODING='UTF8'
Saludos !!
unreal4u está fuera de línea   Citar y responder
Antiguo 25-ago-2010, 01:58
WannyTiggah
The Kitty
 
WannyTiggah
 
Registrado: agosto-2010
Posts: 78
WannyTiggah no tiene una reputación buena ni mala


 
Re: [miniguía] Pasar una base PSQL de SQL_ASCII a UTF8

Es por eso que dije que los pasos los realicé yo en Windows =P
En el pgAdmin con un par de clics se especifica directamente la codificación de la nueva BD ^^;

En *nix tengo entendido que ya está el ejecutable iconv. En la carpeta bin del PSQL de Windows por razones que desconozco sólo viene incluido el iconv.dll, no el ejecutable.
WannyTiggah está fuera de línea   Citar y responder
Antiguo 25-ago-2010, 12:04
unreal4u
Zend Certified Engineer
ex-admin :)

 
unreal4u
 
Registrado: octubre-2005
Ubicación: Eindhoven, The Netherlands
Posts: 12.229
unreal4u goza de buena reputación


Re: [miniguía] Pasar una base PSQL de SQL_ASCII a UTF8

aps, no había cachao esa partecita, leí postgres 8.2.4 y de ahí me fui directo al código y las conclusiones xD

En todo caso, en Linux es exactamente lo mismo... Eso sí, no en todas las distros viene iconv, tuve que hacer algo muy parecido hace tiempo atrás y en Suse por lo menos iconv no venía instalado predeterminadamente.

pgAdmin es para niñitas, a lo macho (y el método más correcto por si queda la grande) es respaldando y creando la db nuevamente. Así se aprovecha de actualizar los índices tb y de hacer un pseudo-vacuum xD (pseudo porque los datos borrados en realidad para la nueva base nunca existieron )
También existe pgAdmin para Linux y todas las demás plataformas

Saludos !!
unreal4u está fuera de línea   Citar y responder

  Foros de CHW > Software > Bases de Datos

Herramientas

Reglas del Foro
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is activado
Emotíconos está activado
El código [IMG] está activado
El código HTML está desactivado
Trackbacks are activado
Pingbacks are activado
Refbacks are activado

Ir a


Estilo del foro: Todas las horas son GMT -3. La hora es 03:00.

Contacto Foro - Privacidad - FAQ - Reglamento Convivencia - Reglamento Compraventa - Ir arriba