postgresql - 使用 to_jsonb(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;
↑ 正在工作,但我希望有机会发送目标表名以进行插入。
所以,通过上面的代码,我可以使用 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;
推荐阅读
- angular - Laravel - auth()->refresh() 在 JWT AuthController 中未定义?
- spring-boot - 如何使用 junit 5 spring boot 编写 pact-jvm 消费者驱动程序协议测试?
- pandas - 当一些列是可变的时更改列的顺序(熊猫)
- amazon-web-services - 从 AWS 上的转储中加载 Neo4J 数据库时出现问题
- swift - UIImage 填充图案颜色
- jquery - 如何根据jointjs中的文本调整矩形大小 - Rappid
- javascript - JS动画跳过文本中的空格
- rust - 有没有办法从一个本身需要 &mut self 的方法中传递 &mut self ?
- html - 如何将表格单元格剪切到html中的文本末尾
- javascript - 在 Gridview 中显示行索引