sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:deshabilitar restricciones

Por comentarios anteriores, debería ser un problema. Dicho esto, hay un comando que puede ser lo que está buscando:establecerá las restricciones en diferido para que se verifiquen en COMMIT, no en cada eliminación. Si está haciendo solo una gran ELIMINACIÓN de todas las filas, no hará la diferencia, pero si lo está haciendo en partes, sí lo hará.

SET CONSTRAINTS ALL DEFERRED

es lo que buscas en ese caso. Tenga en cuenta que las restricciones deben marcarse como DEFERRABLE antes de que puedan ser diferidos. Por ejemplo:

ALTER TABLE table_name
  ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
  DEFERRABLE INITIALLY IMMEDIATE;

La restricción se puede diferir en una transacción o función de la siguiente manera:

CREATE OR REPLACE FUNCTION f() RETURNS void AS
$BODY$
BEGIN
  SET CONSTRAINTS ALL DEFERRED;

  -- Code that temporarily violates the constraint...
  -- UPDATE table_name ...
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;