[英]Insert trigger in postgresql, dynamic statement
我正在尝试将插入触发器添加到表中以实现分区。 以下代码有效:
CREATE OR REPLACE FUNCTION item_lines_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO item_lines_partitions.p11_1 VALUES (NEW.*);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
我的问题是,当我尝试使其动态化时(以便我可以根据获得的值重定向到表),我无法将记录(NEW.*)插入到动态语句中。 这是我尝试做的事情:
CREATE OR REPLACE FUNCTION item_lines_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
EXECUTE format('INSERT INTO item_lines_partitions.p%s_%s VALUES ',NEW.tenant_id,NEW.store_id) || quote_literal(NEW.*);
RETURN NULL;
END;
动态语句出现如下语法错误: PG::SyntaxError: ERROR: syntax error at or near "'(49563,,1,11,100125,100125,1,,...
我也尝试使用EXECUTE <expression... $1> USING NEW.*
但效果不佳。
关于如何将 NEW.* 表达式插入动态语句的任何想法?
谢谢!
尝试这个:
EXECUTE
format(
'INSERT INTO item_lines_partitions.%I SELECT ($1::text::item_lines_partitions.%I).*',
'p' || NEW.tenant_id || '_' || NEW.store_id,
'p' || NEW.tenant_id || '_' || NEW.store_id
)
USING NEW;
在这里, NEW
用作语句的参数并将类型转换为适当的表类型。
你构造表格字符串的方式不安全,所以我改变了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.