2016-09-05 3 views
1

SQLAlchemyで.merge()コールで起動しないトリガに問題があります。
私は、次のトリガーを持っている:トリガーは、次の手順を実行SQLAlchemy:INSERTでトリガが発動しない

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

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

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を行う場合、トリガーは素晴らしい作品

、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(トリガーを発したはずの)との取引がロールバックされているためです。

関連する問題