ARCmop Java Programacion Solaris Linux

Java-linux-programacion

Deshabilitando Foreign Keys (Claves Foraneas) en Postgresql 9

Posted by Cmop en septiembre 20, 2011

Hola a todos, en esta oportunidad escribo para comentar una situacion un poco rara al menos para mi, en muchas ocasiones habia tratado de deshabilitar las restricciones de claves foraneas para acelerar la migración, busqué por la web y me daba con la respuesta que eso se puede hacer si al momento de crear la clave foranea se especifica el parametro DEFERRABLE, como lo dice en la documentacion: POSTGRESQL CREATE TABLE. Si las claves fueron creadas especificando ese parametro se puede levantar la restriccion con la sentencia:

set constraints all deferred;

Esto solo funciona dentro de transacciones.

Una manera que he encontrado, no se si sea la mas correcta, es deshabilitando todos los triggers de las tablas que se desean levantar las restricciones de claves foraneas, esto es posible según mi juicio porque las restricciones de claves foráneas son tratadas como triggers internos, en mi caso he creado un script que deshabilita todos los triggers de la bd de datos. Veamos el codigo:

CREATE OR REPLACE FUNCTION a_desactivar_triggers()
RETURNS SETOF information_schema.tables AS
$BODY$
DECLARE r  information_schema.tables%rowtype;
declare sql text;
declare inc int;
BEGIN
inc:=1;
FOR r IN (select * from information_schema.tables where table_name like '%tb_%')
LOOP
execute 'ALTER TABLE '||r.table_name||' DISABLE TRIGGER ALL';
RETURN NEXT r;
END LOOP;
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE

Adicionalmente, si se han creado las claves sin especificar el parametro DEFERRABLE, se puede hacer una modificacion directa al catalogo para colocar las claves en esta condición y poder usar: set constraints all deferred; para esto pueden leer el siguiente artículo: http://blog.idm.fr/2009/11/deferrable-constraints-in-postgresql.html

Saludos a todos, y les cuento ademas que ya voy a ser papá🙂

Una respuesta to “Deshabilitando Foreign Keys (Claves Foraneas) en Postgresql 9”

  1. […] https://cmop17.wordpress.com/2011/09/20/deshabilitando-foreign-keys-claves-foraneas-en-postgresql-9/ October 7, 2011   //   PostgreSQL   //   No Comments   //   […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: