Limpieza de postgresql despues de usar campos OID
Primero pasar los campos de oid a bytea (hay varias páginas que hablan de las ventajas y desventajas de cada uno pero lo importante es que bytea es más sql y al momento de borrar realmente se borra, puede exportarse el esquema in una tabla en particular que tenga campos bytea etc)
CREATE OR REPLACE FUNCTION merge_oid(val oid)
returns bytea as $$
declare merged bytea;
declare arr bytea;
BEGIN
FOR arr IN SELECT data from pg_largeobject WHERE loid = val ORDER BY pageno LOOP
IF merged IS NULL THEN
merged := arr;
ELSE
merged := merged || arr;
END IF;
END LOOP;
RETURN merged;
END
$$ LANGUAGE plpgsql;
update <tabla> set <campo bytea>=merge_oid(<campo oid>) where true ;
-- limpiar lo_objects
-- https://bugs.launchpad.net/ubuntu/+source/postgresql-8.4/+bug/887138
vacuumlo -v -U postgres -W -h localhost <basededatos>
Este comando está en ubuntu en el paquete contrib así que es necesario instalar postgresql-8.4-contrib o similares.
Otra alternativa usando una funcion :
http://www.microolap.com/products/connectivity/postgresdac/help/TipsAndTricks/ByteaVsOid.htm
No hay comentarios:
Publicar un comentario