PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL - Einschränkungen deaktivieren

Laut vorherigen Kommentaren sollte es ein Problem sein. Das heißt, es gibt einen Befehl, der möglicherweise das ist, wonach Sie suchen - er setzt die Einschränkungen auf verzögert, sodass sie bei COMMIT überprüft werden, nicht bei jedem Löschvorgang. Wenn Sie nur ein großes LÖSCHEN aller Zeilen machen, wird es keinen Unterschied machen, aber wenn Sie es in Teilen machen, wird es.

SET CONSTRAINTS ALL DEFERRED

ist das, was Sie in diesem Fall suchen. Beachten Sie, dass Einschränkungen als DEFERRABLE gekennzeichnet sein müssen bevor sie verschoben werden können. Zum Beispiel:

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

Die Einschränkung kann dann in einer Transaktion oder Funktion wie folgt zurückgestellt werden:

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;