2009-04-01 27 views

Trả lời

8

Đó là ngày đầu tiên của tôi với postresql, nhưng tôi nghĩ rằng bạn có thể kiểm tra trạng thái kích hoạt thông qua hệ thống bảng pg_trigger: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html

Các cột bạn sẽ cần là tgrelidtgenabled.

+2

Hiện tại liên kết cập nhật: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html –

2

SQL bên dưới sẽ thực hiện công việc. Nó hiển thị tất cả các trình kích hoạt trong cơ sở dữ liệu hiện tại của bạn.

SELECT pg_namespace.nspname, pg_class.relname, pg_trigger.* 
FROM pg_trigger 
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid 
JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace 

Nếu tgenabled là 'D', cò bị vô hiệu hóa. Tất cả các giá trị khác (được ghi thành tài liệu here) cho biết rằng nó được kích hoạt theo một cách nào đó.

BTW. Nếu bạn muốn kiểm tra những nguyên nhân cho một bảng cụ thể, truy vấn là một chút ngắn hơn:

SELECT * FROM pg_trigger 
WHERE tgrelid = 'your_schema.your_table'::regclass 

Các đúc để loại regclass giúp bạn từ tên bảng có trình độ để OID (object id) dễ dàng đường.

2
SELECT EXISTS (
    SELECT tgenabled 
    FROM pg_trigger 
    WHERE tgname='your_unique_trigger_name' AND 
      tgenabled != 'D' 
); 

Nếu bạn biết tên cò là duy nhất ở trên sẽ trở thành sự thật (t) nếu your_unique_trigger_name kích hoạt được kích hoạt:

exists 
-------- 
t 
(1 row) 

Nếu vô hiệu hóa nó sẽ trả về false (f).

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