2016-09-05 139 views
1

我遇到了一個觸發器問題,它不會通過SQLAlchemy中的.merge()調用觸發。
我有以下觸發:SQLAlchemy:觸發器沒有觸發INSERT

CREATE TRIGGER trigger_update_comment_count 
BEFORE INSERT ON mediacomment 
FOR EACH ROW 
EXECUTE PROCEDURE update_comment_count(); 

觸發執行以下步驟:

CREATE OR REPLACE FUNCTION update_comment_count() RETURNS trigger AS $BODY$ 
    BEGIN 
     UPDATE channel_users 
     SET comment_count = comment_count + 1, 
     last_comment = NEW.created_time 
     WHERE 
     channel_id = (SELECT ch.channel_id FROM media m 
         INNER JOIN channel ch ON ch.user_id = m.user_id 
         WHERE m.media_id = NEW.media_id) 
     AND user_id = NEW.user_id; 

     RETURN NEW; 
    END; 
$BODY$ LANGUAGE plpgsql; 

觸發的偉大工程,如果我做一個基於SQL INSERT這樣的:

INSERT INTO medialike VALUES (999292999,'2016-01-01 00:00:00.000000',367668179,true,'770160534981089486_12336189'); 

但是,當我使用SQLAlchemy的.merge()方法時,插入一行,但觸發器未被觸發:

com = MediaComment(
     is_follower=is_follower, 
     comment_text=comment['txt'], 
     comment_id_native=str(comment['id']), 
     created_time=comment['time'], 
     user_id=str(comment['id']), 
     media_id=self.media_id 
    ) 
self.session.merge(com) 
self.session.commit() 

有什麼想法可能導致此問題?
我正在運行PostgreSQL-9.4和Python3

+0

你確定它實際上是發出'INSERT'而不是'UPDATE'嗎? – univerio

回答

0

我想通過啓用日誌記錄和檢查日誌文件pg_log。原因是與INSERT交易本應觸發該觸發器,該交易正在回滾。