PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL - désactivation des contraintes

Selon les commentaires précédents, cela devrait être un problème. Cela dit, il y a une commande qui peut être ce que vous recherchez - elle définira les contraintes sur différées afin qu'elles soient vérifiées sur COMMIT, pas sur chaque suppression. Si vous ne faites qu'un seul grand DELETE de toutes les lignes, cela ne fera aucune différence, mais si vous le faites par morceaux, cela le fera.

SET CONSTRAINTS ALL DEFERRED

est ce que vous cherchez dans ce cas. Notez que les contraintes doivent être marquées comme DEFERRABLE avant qu'ils ne puissent être différés. Par exemple :

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

La contrainte peut alors être différée dans une transaction ou fonction comme suit :

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;