PostgreSQL-在更新触发器之前确定要更新的列

时间:2019-01-19 19:32:20

标签: postgresql plpgsql database-trigger

我有一个包含许多列的表。 需要查找哪些列的值已更改。 我正在使用以下代码。我遇到了性能问题。

我可以使用其他方法吗?

   CREATE OR REPLACE FUNCTION public.mytable()
      RETURNS trigger AS $$
    DECLARE
      _rec record;
    BEGIN
      FOR _rec IN
        SELECT
          o.key
          , o.value AS old_value
          , n.value AS new_value
        FROM json_each(to_json(new)) n
          INNER JOIN json_each(to_json(old)) o ON o.key = n.key
      LOOP
        IF (_rec.old_value::text IS DISTINCT FROM _rec.new_value::text) THEN
          /* 
             field name: _rec.key, 
             old values: _rec.old_value, 
             new value : _rec.new_value
          */
        END IF;
      END LOOP;

      RETURN NEW;
    END;
    $$
    LANGUAGE 'plpgsql';

0 个答案:

没有答案