Googling-fu của tôi không làm tôi thất vọng. Làm thế nào để biết nếu một kích hoạt PostgreSQL bị vô hiệu hóa hay không?Làm cách nào để bạn biết trình kích hoạt có được bật trong PostgreSQL không?
Trả lời
Đó 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à tgrelid
và tgenabled
.
Hiện tại liên kết cập nhật: http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html –
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.
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).
là trình kích hoạt được bật theo mặc định trong khi tạo em? Rõ ràng ALTER BẢNG ENABLE TRIGGER cần thiết? – user4658312