Postgres 9.4触发器表现异常,
我需要有关如何确保触发器正常工作的指导原则及可能的原因
CREATE OR REPLACE FUNCTION recieptfunction()
RETURNS trigger AS
$$
BEGIN
IF ( NEW.dlr_mask=31 ) THEN
INSERT INTO test1(
rec_id, sender, receiver, udhdata, msgdata, "time", smsc_id,
service, account, id, sms_type, mclass, mwi, coding, compress,
validity, "deferred", dlr_mask, dlr_url, pid, alt_dcs, rpi, charset,
boxc_id, binfo, meta_data, foreign_id, client_track_id, msg_cost,
stid, gstid, smsid, gctid, sendreport, mno, requestresptime,
dsm, identifier, userid, receiptcallback, replycallback, replyemail,
delemail, sentemail, nextdayearliestsendtime, replyemailflag,
replymsg, replytime, momt, "isUnicode",status)
VALUES (NEW.sql_id, NEW.sender, NEW.receiver, NEW.udhdata, NEW.msgdata, NEW."time", NEW.smsc_id,
NEW.service, NEW.account, NEW.id, NEW.sms_type, NEW.mclass, NEW.mwi, NEW.coding, NEW.compress,
NEW.validity, NEW."deferred", NEW.dlr_mask, NEW.dlr_url, NEW.pid, NEW.alt_dcs, NEW.rpi, NEW.charset,
NEW.boxc_id, NEW.binfo, NEW.meta_data, NEW.foreign_id, NEW.client_track_id, NEW.msg_cost,
NEW.stid, NEW.gstid, NEW.smsid, NEW.gctid, NEW.sendreport, NEW.mno, NEW.requestresptime,
NEW.dsm, NEW.identifier, NEW.userid, NEW.receiptcallback, NEW.replycallback, NEW.replyemail,
NEW.delemail, NEW.sentemail, NEW.nextdayearliestsendtime, NEW.replyemailflag,
NEW.replymsg, NEW.replytime, NEW.momt, NEW."isUnicode",NEW.dlr_mask);
ELSIF(NEW.dlr_mask=1) THEN
UPDATE test1 set dlr_mask_del_success=NEW.dlr_mask, "time_del_success"=NEW."time",status=NEW.dlr_mask,showfinalstatus=true where service=NEW.service;
ELSIF( NEW.dlr_mask=8 ) THEN
UPDATE test1 set dlr_mask_smsc_sub=NEW.dlr_mask, "time_smsc_sub"=NEW."time",status=NEW.dlr_mask,showfinalstatus=false where service=NEW.service;
ELSIF( NEW.dlr_mask=16 ) THEN
UPDATE test1 set dlr_mask_smsc_rej=NEW.dlr_mask, "time_smsc_rej"=NEW."time",status=NEW.dlr_mask,showfinalstatus=true where service=NEW.service;
ELSIF( NEW.dlr_mask=4 ) THEN
UPDATE test1 set dlr_mask_msg_buf=NEW.dlr_mask, "time_msg_buf"=NEW."time",status=NEW.dlr_mask,showfinalstatus=false where service=NEW.service;
ELSIF( NEW.dlr_mask=2 ) THEN
UPDATE test1 set dlr_mask_del_failure=NEW.dlr_mask, "time_del_failure"=NEW."time",status=NEW.dlr_mask,showfinalstatus=true where service=NEW.service;
ELSIF( NEW.dlr_mask IS NULL ) THEN
INSERT INTO sql_reply_reciept_sms(
sql_id, sender, receiver, udhdata, msgdata, "time", smsc_id,
service, account, id, sms_type, mclass, mwi, coding, compress,
validity, "deferred", dlr_mask, dlr_url, pid, alt_dcs, rpi, charset,
boxc_id, binfo, meta_data, foreign_id, client_track_id, msg_cost,
stid, gstid, smsid, gctid, sendreport, mno, requestresptime,
dsm, identifier, userid, receiptcallback, replycallback, replyemail,
delemail, sentemail, nextdayearliestsendtime, replyemailflag,
replymsg, replytime, momt, "isUnicode")
VALUES (NEW.sql_id, NEW.sender, NEW.receiver, NEW.udhdata, NEW.msgdata, NEW."time", NEW.smsc_id,
NEW.service, NEW.account, NEW.id, NEW.sms_type, NEW.mclass, NEW.mwi, NEW.coding, NEW.compress,
NEW.validity, NEW."deferred", NEW.dlr_mask, NEW.dlr_url, NEW.pid, NEW.alt_dcs, NEW.rpi, NEW.charset,
NEW.boxc_id, NEW.binfo, NEW.meta_data, NEW.foreign_id, NEW.client_track_id, NEW.msg_cost,
NEW.stid, NEW.gstid, NEW.smsid, NEW.gctid, NEW.sendreport, NEW.mno, NEW.requestresptime,
NEW.dsm, NEW.identifier, NEW.userid, NEW.receiptcallback, NEW.replycallback, NEW.replyemail,
NEW.delemail, NEW.sentemail, NEW.nextdayearliestsendtime, NEW.replyemailflag,
NEW.replymsg, NEW.replytime, NEW.momt, NEW."isUnicode");
ELSE RAISE EXCEPTION 'Date out of range. Fix the measurement_insert_trigger() function!';
END IF;
RETURN NEW;
END;
$$
LANGUAGE plpgsql ;
这是触发器
CREATE TRIGGER afterinsert
AFTER INSERT ON test
FOR EACH ROW
EXECUTE PROCEDURE recieptfunction()
触发器表现异常,它已经输入了几乎所有数据但是在test1表中没有插入一些数据,我已经检查了它在插入过程中没有错误的日志。 9.4版本的触发器有时会出现异常,我是否需要更改版本。