Hola Jorge, te paso el código que utilicé (respaldo.sql es el dump en
formato plano de la BD):


import codecs

def encode_invalid_chars(input_file, output_file):
    with codecs.open(input_file, 'r', encoding='utf-8', errors='replace')
as file_in:
            with codecs.open(output_file, 'w', encoding='utf-8') as
file_out:
                        for line in file_in:
                                        encoded_line = line.encode('utf-8',
errors='replace').decode('utf-8')
                                        file_out.write(encoded_line)
input_file = 'respaldo.sql'
output_file = 'respaldo_fixed.sql'
encode_invalid_chars(input_file, output_file)

Luego ejecutar el código con:
python utf8detect.py



El sáb, 20 may 2023 a las 23:27, jorge gerardo fernandez lugo (<
jorge...@hotmail.com>) escribió:

> Hola Guillermo,
> Muy bueno que hayas pasado de 8.0 a una nueva (11 creo por lo que ví).
>
> Me interesa la parte del script python. Ya que tengo un problema similar
> con unos postgresql 8.4 con ASCII cómo codificación, que al pasarlos a UTF8
> se rompe con los caracteres que no puede manejar.
>
> Apreciaré mucho si podés compartir el código.
>
> Saludos,
> Jorge Fernández
>
> Obtener Outlook para Android <https://aka.ms/AAb9ysg>
>
> ------------------------------
> *De:* Guillermo E. Villanueva <guillermo...@gmail.com>
> *Enviado:* jueves, 18 de mayo de 2023 09:33
> *Para:* pgsql-es-ayuda <pgsql-es-ay...@postgresql.org>
> *Asunto:* Re: de versión 8 a versión actual
>
> Pude realizar la migración desde 8.0
> Por si sirve la información a otros, les comento algunas cosas:
>
> Las complicaciones se dieron por varios factores:
>
>    - Versión muy antigua de postgres
>    - Codificación de datos de origen ascii con algunos caracteres no
>    codificables en utf8
>    - Utilización de campos large objects en el origen
>
>
>
> Para la migración se utilizaron los siguientes recursos
>
>    - Pg_dump (versión postgres destino) formato custom para tabla
>    pg_largeobject (blobs)
>    - Pg_dump  (versión postgres destino) formato plano para datos de
>    esquema public
>    - Programación en Python para detección y reemplazo de caracteres no
>    codificables en utf8, actúa sobre el archivo salida del punto anterior.
>    - Funciones plpgsql para el traspaso de large object a bytea
>
>
> Saludos
>
> El vie, 5 may 2023 a las 11:29, Guillermo E. Villanueva (<
> guillermo...@gmail.com>) escribió:
>
>> Buen día, en un sistema viejo, tengo una base de datos postgresql 8.0 la
>> cual tiene tablas con columnas de tipo lo (large objects).
>> Tengo que migrarlo a una versión mas actual de postgres y a las columnas
>> de tipo lo las convertiré en bytea.
>> Normalmente, para la migración de datos, usaba una herramienta que se
>> llama ESF Migration, esta me permitió pasar datos hasta desde informix con
>> columnas blob sin problemas, pero en este caso, no me está trayendo los
>> datos correctamente, trae el id del objeto en vez de traer los datos
>> completos.
>>
>> ¿Alguna sugerencia? pg_upgrade convierte large object en bytea? que otra
>> opción? también intenté con pg_dump -Fc -b y luego pg_restore, pero me da
>> error diciendo que no existe el tipo lo al querer restaurar.
>>
>> Desde ya muchas gracias
>>
>> Guillermo
>>
>
>

Reply via email to