PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL - vô hiệu hóa các ràng buộc

Theo nhận xét trước đây, nó phải là một vấn đề. Điều đó nói rằng, có một lệnh có thể là những gì bạn đang tìm kiếm - nó sẽ đặt các ràng buộc thành trì hoãn để chúng được kiểm tra trên COMMIT, không phải trên mỗi lần xóa. Nếu bạn chỉ thực hiện một lần XÓA lớn tất cả các hàng, điều đó sẽ không tạo ra sự khác biệt, nhưng nếu bạn đang thực hiện từng phần một thì sẽ có.

SET CONSTRAINTS ALL DEFERRED

là những gì bạn đang tìm kiếm trong trường hợp đó. Lưu ý rằng các ràng buộc phải được đánh dấu là DEFERRABLE trước khi chúng có thể được hoãn lại. Ví dụ:

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

Sau đó, ràng buộc có thể được hoãn lại trong một giao dịch hoặc chức năng như sau:

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. Thay thế các ký tự unicode trong PostgreSQL

  2. Làm cách nào để đặt giới hạn kích thước cho kiểu dữ liệu int trong PostgreSQL 9.5

  3. Một hệ thống bảo mật cho ứng dụng, tổng hợp kết nối và PostgreSQL - Trường hợp cho LDAP

  4. Cột postgres không tồn tại

  5. Hội nghị PostgreSQL mùa xuân 2011, Hoa Kỳ / Canada