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

Xóa các hàng có khóa ngoại trong PostgreSQL

Để tự động hóa việc này, bạn có thể xác định ràng buộc khóa ngoại với ON DELETE CASCADE .
Tôi trích dẫn hướng dẫn cho ràng buộc khóa ngoại :

Tra cứu định nghĩa FK hiện tại như sau:

SELECT pg_get_constraintdef(oid) AS constraint_def
FROM   pg_constraint
WHERE  conrelid = 'public.kontakty'::regclass  -- assuming public schema
AND    conname = 'kontakty_ibfk_1';

Sau đó thêm hoặc sửa đổi ON DELETE ... một phần của ON DELETE CASCADE (giữ nguyên mọi thứ khác) trong một tuyên bố như:

ALTER TABLE kontakty
   DROP CONSTRAINT kontakty_ibfk_1
 , ADD  CONSTRAINT kontakty_ibfk_1
   FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;

Không có ALTER CONSTRAINT yêu cầu. Thả và tạo lại ràng buộc trong một ALTER TABLE để tránh các điều kiện chạy đua có thể xảy ra với quyền truy cập ghi đồng thời.

Rõ ràng là bạn cần có đặc quyền để làm như vậy. Thao tác sử dụng ACCESS EXCLUSIVE khóa trên bàn kontaktySHARE ROW EXCLUSIVE khóa trên bàn osoby .

Nếu bạn không thể ALTER bảng, sau đó xóa bằng tay (một lần) hoặc bằng cách kích hoạt BEFORE DELETE (mọi lúc) là các tùy chọn còn lại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nhận thông báo cảnh báo thủ tục Postgresql?

  2. Heroku Postgres Error:PGError:ERROR:các tổ chức quan hệ không tồn tại (ActiveRecord ::StatementInvalid)

  3. Đặt một tùy chọn tùy chỉnh trong một quy trình được lưu trữ

  4. Cách xác định khóa chính tự động tăng dần trong PostgreSQL

  5. SQL lấy tên những người không làm việc trong một dự án