2011-10-18 22 views
5

Trong PostgreSQL 8.x để vô hiệu hóa trigger tôi làm điều gì đó như:Làm cách nào để tắt trình kích hoạt trong PostgreSQL 9?

ALTER TABLE table DISABLE TRIGGER ALL; 

Khi tôi làm điều này trong PostgreSQL 9 tôi nhận được như sau:

my_database=> ALTER TABLE my_table DISABLE TRIGGER ALL; 
ERROR: permission denied: "RI_ConstraintTrigger_25366" is a system trigger 

PS: Bảng này được tạo ra bởi người sử dụng đang chạy lệnh này.

Bất kỳ manh mối nào về điều này?

Trả lời

9

Một số trình kích hoạt được thêm tự động để thực thi các ràng buộc và những trình kích hoạt này không thể bị tắt trừ khi bạn là siêu người dùng. Nếu bạn chỉ muốn vô hiệu hóa trình kích hoạt bình thường mà bạn đã thêm, hãy thực hiện điều này:

ALTER TABLE table DISABLE TRIGGER USER; 
+0

@ André: Hành vi này giống như pg ** 8.1 **. (Và đừng quên bảng ALTER TABLE ENABLE TRIGGER USER; 'sau đó, btw.) –

+0

Xin chào, cảm ơn bạn đã trả lời. Tôi chỉ có thể vô hiệu hóa nếu tôi làm "TRIGGER ALL" với người dùng Postgres, "TRIGGER USER" không tắt Trình kích hoạt. –

+5

Vâng, nó sẽ không vô hiệu hóa các ràng buộc ràng buộc không, bởi vì sau đó các ràng buộc của bạn sẽ không được thực thi. Nếu bạn muốn vô hiệu hóa chúng thì bạn sẽ phải là một siêu người dùng. – TomH

Các vấn đề liên quan