Re: problema con colision de identificadores de lob al restaurar

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Hellmuth Vargas <hivs77(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con colision de identificadores de lob al restaurar
Date: 2011-12-09 17:56:21
Message-ID: 1323453128-sup-6793@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Excerpts from Hellmuth Vargas's message of jue dic 01 00:22:25 -0300 2011:
> buenas noches lista
>
> resulta que tengo una serie de cluster de postgres que queremos unificar en
> un unico cluster. Todos los cluster tiene una base de datos con nombres de
> schemas diferentes entre si por lo tanto en principio podria crearse una
> unica base donde podrian convivir todos los schemas y no deberia tene
> problema, generamos tanto un dump como archivo de sentencia SQL, empezamos
> a restaurar los archivos y en principio no molesta con el primero y
> segundo pero con el tercero y cuarto al momento que va a restaurar los lob
> genera el siguiente error:
>
>
> pg_restore: *** aborted because of error
> pg_restore: [archiver] could not create large object 21709: ERROR:
> duplicate key value violates unique constraint
> "pg_largeobject_metadata_oid_index"DETAIL: Key (oid)=(21709) already
> exists.pg_restore: *** aborted because of error
> segun creo es un problema del diccionario de datos al registrar los
> lob...Que puedo hacer? les agradezco sus comentarios y tiempo
> buenas noches lista

¿Resolviste este problema? Que yo sepa, pg_dump/pg_restore no tiene
ningún mecanismo para modificar los OIDs de large objects. Sería
complicado de todas formas. Creo que lo único que te podría sugerir
sería cambiar las referencias en las bases de datos de origen, de manera
que te asegures que los conjuntos de OIDs en cada servidor sean todos
disjuntos. Luego haces nuevamente el dump en cada uno y así los restore
deberían funcionar.

Hacer esos cambios no debe ser trivial; para no tener que hacer UPDATEs
masivos de las referencias a los LOs, supongo que lo que yo haría sería
ponerlos todos en una tabla en un solo servidor (lo oid, int servidor) y
luego buscar los que tienen conflictos, y a partir de eso construir
UPDATEs que cambien las referencias y hacer un lo_copy() o algo así para
crear un nuevo objeto con el nuevo OID; algo así:
http://archives.postgresql.org/pgsql-general/2003-04/msg00018.php

suerte

--
Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rodrigo Gonzalez 2011-12-09 17:58:43 Re: Conectarse a otra BD
Previous Message Alvaro Herrera 2011-12-09 17:46:36 Re: Conectarse a otra BD