PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL - wyłączanie ograniczeń

Zgodnie z poprzednimi komentarzami powinien być problem. To powiedziawszy, istnieje polecenie, które może być tym, czego szukasz — ustawi ograniczenia na odroczone, aby były sprawdzane przy COMMIT, a nie przy każdym usunięciu. Jeśli wykonujesz tylko jedno duże DELETE ze wszystkich rzędów, nie będzie to miało znaczenia, ale jeśli robisz to w częściach, to zrobi.

SET CONSTRAINTS ALL DEFERRED

jest tym, czego szukasz w takim przypadku. Zwróć uwagę, że ograniczenia muszą być oznaczone jako DEFERRABLE zanim będą mogły zostać odroczone. Na przykład:

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

Ograniczenie można następnie odroczyć w transakcji lub funkcjonować w następujący sposób:

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wdrażanie i konfiguracja PostgreSQL za pomocą Puppet

  2. Integracja PostgreSQL z systemami uwierzytelniania

  3. Dostrajanie PostgreSQL:kluczowe elementy zwiększania wydajności

  4. Kolejność zwrotu wiersza SQL

  5. Postgres Zmień liczbę całkowitą kolumny na Boolean