比较触发器中的两行

时间:2016-07-20 11:05:12

标签: sql postgresql

我正在使用postgreSQL 9.3

我正在尝试在触发器中比较OLDNew。 我知道我可以一次将一列与if old.name is distinct from new.name then进行比较。 但是我的情况更复杂。我有35列。触发器用于检查是否可以执行UPDATE声明。总共允许使用其中3列,但其余部分有时是允许的,有时则不允许。

表名是:customers

允许:

customername
entrydate
entrynotes

因此,例如,如果更新位于customernameentrydate,则触发器不执行任何操作。如果它在entrydatephone上,则触发器不允许更新。所以我的目标是获取即将在触发器中更新的列的列表。 基本上它都是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

我该怎么办?

0 个答案:

没有答案