PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL - desabilitando restrições


Por comentários anteriores, deve ser um problema. Dito isto, existe um comando que pode ser o que você está procurando - ele definirá as restrições como adiadas para que sejam verificadas no COMMIT, não em todas as deleções. Se você estiver fazendo apenas um grande DELETE de todas as linhas, não fará diferença, mas se estiver fazendo em partes, fará.
SET CONSTRAINTS ALL DEFERRED

é o que você está procurando nesse caso. Observe que as restrições devem ser marcadas como DEFERRABLE antes que possam ser adiados. Por exemplo:
ALTER TABLE table_name
  ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
  DEFERRABLE INITIALLY IMMEDIATE;

A restrição pode então ser adiada em uma transação ou função da seguinte forma:
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;