[英]why does postgresql think the record is null while its clearly not?
我有一个包含一行的表的更新触发器,我有一个名为RFID
的列。 触发器应该在该行上触发AFTER UPDATE
并告诉我该列的值是否已更改。 问题是,它认为记录 OLD 和 NEW 是 null,而它们显然不是。 我稍微更改了 function 代码,只是为了突出我的问题。 这是 function 和触发代码。
CREATE FUNCTION General_Update() RETURNS TRIGGER LANGUAGE plpgsql AS $BODY$
DECLARE
data TEXT;
BEGIN
IF NEW."RFID" IS NULL THEN
RAISE EXCEPTION 'RFID cannot be null';
ELSEIF (OLD."RFID" IS DISTINCT FROM NEW."RFID") THEN
data = 'changed';
ELSE data = ' unchanged';
END IF;
PERFORM pg_notify('samme3a', data);
RETURN NEW;
END
$BODY$;
CREATE TRIGGER General_Trigger
AFTER UPDATE ON "OPC1Data"
EXECUTE FUNCTION General_Update()
每次我尝试更新时都会触发异常“RFID 不能为空”。
如果您想要new
old
记录,则需要FOR EACH ROW
触发器。
CREATE TRIGGER general_trigger
AFTER UPDATE
ON "OPC1Data"
FOR EACH ROW
EXECUTE FUNCTION general_update();
还有一些旁注:
"RFID"
的实际非 null 约束。 只需在表的CREATE
语句中声明列NOT NULL
。 这样,每个查看表定义的人都会知道"RFID"
不可为空,而无需查看触发器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.