Используя to_jsonb (NEW) и выполните - PullRequest
0 голосов
/ 01 октября 2019
CREATE OR REPLACE FUNCTION change_trigger() RETURNS trigger AS $$
  BEGIN
    INSERT INTO static_table_name (content) VALUES (to_jsonb(NEW));
  END;
$$ LANGUAGE 'plpgsql' SECURITY DEFINER;

working работает, но я хотел бы иметь возможность отправить имя целевой таблицы для вставки.

Итак, с помощью приведенного выше кода я смог использовать dymanic_table_name,

CREATE OR REPLACE FUNCTION change_trigger() RETURNS trigger AS $$
  DECLARE
    dymanic_table_name TEXT;
  BEGIN
    dymanic_table_name := TG_ARGV[0];

    EXECUTE 'INSERT INTO '  || dymanic_table_name || ' (content) VALUES (' || to_json(NEW) || ');';
  END;
$$ LANGUAGE 'plpgsql' SECURITY DEFINER;

, но он не работает при попытке вставить результат функции 'to_json' ...

ОШИБКА:

ERROR:  "{"またはその近辺で構文エラー
LINE 1: ..._table (content) VALUES ({"id":43,"...
                                    ^

※ Извините за японский синтаксис (* ´ 艸 `)

1 Ответ

1 голос
/ 01 октября 2019

Вам нужно будет использовать динамический SQL, например:

EXECUTE
   format(
      'INSERT INTO %I (content) VALUES (to_json($1))', 
      dymanic_table_name
   )
   USING NEW;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...