如何在plpgsql NEW或OLD中创建foreach变量

时间:2016-11-07 07:05:57

标签: postgresql triggers plpgsql

你可以做类似的事情:

foreach m slice 1 IN array NEW.*
loop
RAISE NOTICE 'var: %', m;
END LOOP;

,或者

FOR i IN NEW LOOP
    RAISE NOTICE 'var: %', i;
END LOOP

1 个答案:

答案 0 :(得分:4)

触发器功能中的

NEW and OLD are special record variables。你不能像通过数组一样遍历它们。

循环遍历(众所周知的)记录或行的列的一种方法:转换为jsonjsonb,然后:

CREATE OR REPLACE FUNCTION foo()
  RETURNS trigger AS
$BODY$
DECLARE
   js  jsonb := to_jsonb(NEW);
   col text;
BEGIN
   FOR col IN SELECT * FROM jsonb_object_keys(js)
   LOOP
      RAISE NOTICE '%: %', col, js->>col;
   END LOOP;

   RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE;