6
我想驗證將觸發器添加到某些表的數據庫遷移的正確性。我正在使用sqitch,所以我想找一種方法用SQL查詢來檢查它。我相信應該可以使用postgres系統表,但我目前無法找到這樣做的方法。如何檢查PostgreSQL中是否存在觸發器?
我想驗證將觸發器添加到某些表的數據庫遷移的正確性。我正在使用sqitch,所以我想找一種方法用SQL查詢來檢查它。我相信應該可以使用postgres系統表,但我目前無法找到這樣做的方法。如何檢查PostgreSQL中是否存在觸發器?
使用目錄pg_trigger。
簡單的查找一個表books
:
select tgname
from pg_trigger
where not tgisinternal
and tgrelid = 'books'::regclass;
tgname
---------------
books_trigger
(1 row)
使用pg_proc
得到觸發功能的來源:
select pg_get_triggerdef(t.oid) as "trigger declaration"
from pg_trigger t
where not tgisinternal
and tgrelid = 'books'::regclass;
trigger declaration
--------------------------------------------------------------------------------------------------------------
CREATE TRIGGER books_trigger BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger()
(1 row)
:
的
pg_get_triggerdef()
功能的使用的實施例我實際上已經嘗試過,並且很困惑。奇怪的是:我得到7'tgname's看起來像這樣'RI_ConstraintTrigger_c_195564',而不是1.我使用postgresql 9.4。 – dredozubov它們是內部約束觸發器。使用'not tgisinternal'來跳過它們,就像在編輯的答案中一樣。 – klin
謝謝!它幫助! – dredozubov