使用 to_jsonb(新) 并执行


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;

↑ 正在工作,但我希望有机会发送目标表名称进行插入。

所以 通过上面的代码,我能够使用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,"...
^

※ 对不起日语语法(*'艸'(

你必须像这样使用动态 SQL:

EXECUTE
format(
'INSERT INTO %I (content) VALUES (to_json($1))', 
dymanic_table_name
)
USING NEW;

相关内容

最新更新