PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL - menonaktifkan batasan

Per komentar sebelumnya, itu harus menjadi masalah. Yang mengatakan, ada perintah yang mungkin Anda cari - itu akan mengatur batasan untuk ditangguhkan sehingga mereka diperiksa di COMMIT, bukan pada setiap penghapusan. Jika Anda hanya melakukan satu DELETE besar dari semua baris, itu tidak akan membuat perbedaan, tetapi jika Anda melakukannya berkeping-keping, itu akan terjadi.

SET CONSTRAINTS ALL DEFERRED

adalah apa yang Anda cari dalam kasus itu. Perhatikan bahwa batasan harus ditandai sebagai DEFERRABLE sebelum dapat ditangguhkan. Misalnya:

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

Batasan tersebut kemudian dapat ditangguhkan dalam transaksi atau fungsi sebagai berikut:

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. Amazon RDS untuk Alternatif PostgreSQL - ClusterControl untuk PostgreSQL

  2. TIDAK DI di postgresql tidak berfungsi

  3. psql - simpan hasil perintah ke file

  4. Performa OLTP sejak PostgreSQL 8.3

  5. PostgreSQL 12:Kunci Asing dan Tabel yang Dipartisi