使用 to_jsonb(NEW) 并执行
Using to_jsonb(NEW) and execute
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;
↑ 正在工作,但我希望有机会发送目标 table 名称以供插入。
所以,
通过上面的代码,我可以使用 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())',
dymanic_table_name
)
USING NEW;
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;
↑ 正在工作,但我希望有机会发送目标 table 名称以供插入。
所以, 通过上面的代码,我可以使用 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())',
dymanic_table_name
)
USING NEW;