PostgreSQL - перед обновлением триггер определяет, какие столбцы были обновлены - PullRequest
0 голосов
/ 19 января 2019

У меня есть таблица со многими столбцами. Нужно найти, какие значения столбцов изменились. Я использую следующий код. У меня проблема с производительностью.

Могу ли я сделать это другим способом?

   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';
...