我有一个场景,在某种更新之前激活一个触发函数。为了满足条件,必须将其中一列从"旧的";以及";NEW";对象。
CREATE FUNCTION example_function() RETURNS trigger AS
$example_function$
BEGIN
IF
(OLD <> NEW) IS TRUE THEN
//Do something here
END IF;
RETURN NEW;
END;
$example_function$
LANGUAGE plpgsql;
CREATE TRIGGER example_function
BEFORE UPDATE
ON some_table
FOR EACH ROW
EXECUTE PROCEDURE example_function();
问题是,该表有50多列,之后很难键入或维护。
我想排除的列——比如说modified_date——每次都会满足不同的条件,但如何才能完全排除在检查之外?
(OLD<>NEW exclude-modified_date(为真,然后-类似的事情应该在逻辑上发生
也许您可以使用这样的代码,其中tab
是带有触发器的表:
DECLARE
oldrow tab := OLD;
newrow tab := NEW;
BEGIN
oldrow.modified_date := NULL;
newrow.modified_date := NULL;
IF oldrow IS DISTINCT FROM newrow THEN
/* whatever */
END IF;
RETURN NEW;
END
您可以比较不包括所选列的记录的JSON表示:
...
if to_jsonb(new)- 'modified_date' <> to_jsonb(old)- 'modified_date' then
...