2016-09-05 3 views
1

SQLAlchemy에서 .merge() 호출을 통해 트리거되지 않는 트리거에 문제가 있습니다.
나는 다음 트리거가 있습니다SQLAlchemy : INSERT에서 트리거가 실행되지 않습니다.

INSERT INTO medialike VALUES (999292999,'2016-01-01 00:00:00.000000',367668179,true,'770160534981089486_12336189'); 
:이 같은 SQL 기반 INSERT를 할 경우

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; 

트리거가 잘 작동 :

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

트리거는 다음 절차 실행을

, 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

실제로 '업데이트'가 아닌 '삽입'이 실행되고 있습니까? – univerio

답변

0

을 실행하는거야 내가 로깅을 활성화하고 pg_log에서 로그 파일을 검사하여 그것을 알아 냈다. 그 이유는 방아쇠를 당겨야했던 INSERT과의 거래가 취소 되었기 때문입니다.

관련 문제