Resultados 1 al 4 de 4

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

  1. #1
    The Kitty Avatar de WannyTiggah
    Fecha de ingreso
    08 Aug, 10
    Mensajes
    157

    [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 [CAPTION="C:\Archivos de programa\GnuWin32\bin"]la carpeta bin de iconv[/CAPTION] a [CAPTION="C:\Archivos de programa\PostgreSQL\<version>\bin"]la carpeta bin de los ejecutables de PostgreSQL[/CAPTION]

    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:

    Código:
    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

    Código:
    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:

    Código:
    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
    Última edición por WannyTiggah; 24/08/2010 a las 22:43

  2. #2
    Enajenado
    Avatar de unreal4u
    Fecha de ingreso
    02 Oct, 05
    Ubicación
    Eindhoven, The Netherlands
    Mensajes
    12,109

    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:

    Código:
    CREATE DATABASE Base8 ENCODING='UTF8'
    Saludos !!
    Lee Nuestra FAQ, los famosos 14 mandamientos de CHW.
    El Reglamento de Compra-Venta, Nuestra Visión y por último, Nuestra Historia


    Futurama & The IT Crowd fanboy
    Frase célebre: "Debido a la gran cantidad de guiños y referencias relacionadas con el mundo informático, esta sección permanecerá siempre incompleta, al menos hasta que se complete"
    Para el bronce: Oh, i'm very confortable with my sexuality, i just don't want to be slapped in the face with THEIR sexuality

    Mi blog | Mi Twitter | Zend Certified Engineer

  3. #3
    The Kitty Avatar de WannyTiggah
    Fecha de ingreso
    08 Aug, 10
    Mensajes
    157

    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.

  4. #4
    Enajenado
    Avatar de unreal4u
    Fecha de ingreso
    02 Oct, 05
    Ubicación
    Eindhoven, The Netherlands
    Mensajes
    12,109

    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 !!
    Lee Nuestra FAQ, los famosos 14 mandamientos de CHW.
    El Reglamento de Compra-Venta, Nuestra Visión y por último, Nuestra Historia


    Futurama & The IT Crowd fanboy
    Frase célebre: "Debido a la gran cantidad de guiños y referencias relacionadas con el mundo informático, esta sección permanecerá siempre incompleta, al menos hasta que se complete"
    Para el bronce: Oh, i'm very confortable with my sexuality, i just don't want to be slapped in the face with THEIR sexuality

    Mi blog | Mi Twitter | Zend Certified Engineer

Temas similares

  1. Respuestas: 90
    Último mensaje: 28/03/2016, 11:18
  2. Respuestas: 21
    Último mensaje: 21/01/2014, 19:05
  3. Respuestas: 3
    Último mensaje: 24/10/2009, 01:26
  4. Aceleracion 3D opensuse (Video VIA, S3) (MiniGuia)
    Por tuxramos en el foro GNU/Linux y otros sistemas operativos
    Respuestas: 8
    Último mensaje: 15/11/2008, 22:29
  5. Opiniones para una miniguia [photoshop]
    Por Raikonen en el foro Windows y programas varios
    Respuestas: 23
    Último mensaje: 23/07/2006, 18:20

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*