[英]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.