我正在使用postgreSQL 9.3
我正在尝试在触发器中比较OLD
和New
。
我知道我可以一次将一列与if old.name is distinct from new.name then
进行比较。
但是我的情况更复杂。我有35列。触发器用于检查是否可以执行UPDATE
声明。总共允许使用其中3列,但其余部分有时是允许的,有时则不允许。
表名是:customers
允许:
customername
entrydate
entrynotes
因此,例如,如果更新位于customername
和entrydate
,则触发器不执行任何操作。如果它在entrydate
和phone
上,则触发器不允许更新。所以我的目标是获取即将在触发器中更新的列的列表。
基本上它都是new.column_name <> old.column_name
CREATE TRIGGER customerreview
BEFORE UPDATE
ON customers FOR EACH ROW
EXECUTE PROCEDURE checkdata();
CREATE OR REPLACE FUNCTION checkdata()
RETURNS trigger AS
$BODY$
....
for row in
select key, value
from jsonb_each_text(row_to_json(old)) jo
join jsonb_each_text(row_to_json(new)) jn on (jo.key = jn.key)
where jo.value <> jn.value
loop
IF row.key not in ('customername','entrydate','entrynotes') then
do something
END IF;
....
$BODY$
然而我收到错误:
错误:函数jsonb_each_text(customers)不存在LINE 21: 来自jsonb_each_text(old)jo
我该怎么办?