在postgresql动态语句中插入触发器

在postgresql动态语句中插入触发器,postgresql,stored-procedures,Postgresql,Stored Procedures,我试图向表中添加一个insert触发器以实现分区。 以下代码起作用: 创建或替换功能项\u行\u插入\u触发器() 将触发器返回为$$ 开始 插入项目_行_分区.p11_1值(新。*); 返回NULL; 结束; $$ 语言plpgsql; 我的问题是,当我试图使它成为动态的(这样我就可以根据我得到的值重定向到一个表),我就是不能将记录(NEW.*)插入到动态语句中。 以下是我试图做的: 创建或替换功能项\u行\u插入\u触发器() 将触发器返回为$$ 开始 执行格式('INSERT INTO

我试图向表中添加一个insert触发器以实现分区。 以下代码起作用:

创建或替换功能项\u行\u插入\u触发器()
将触发器返回为$$
开始
插入项目_行_分区.p11_1值(新。*);
返回NULL;
结束;
$$
语言plpgsql;
我的问题是,当我试图使它成为动态的(这样我就可以根据我得到的值重定向到一个表),我就是不能将记录(NEW.*)插入到动态语句中。 以下是我试图做的:

创建或替换功能项\u行\u插入\u触发器()
将触发器返回为$$
开始
执行格式('INSERT INTO item_line_partitions.p%s_%s VALUES',NEW.tenant_id,NEW.store_id)| quote_literal(NEW.*);
返回NULL;
结束;
动态语句出现如下语法错误:
PG::SyntaxError:ERROR:语法错误位于或接近“”(49563,1,11100125100125,1,,…)

我还尝试使用
executeusingnew.*
,但效果不太好

关于如何在动态语句中插入新的.*表达式,您有什么想法吗

谢谢!

试试这个:

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
用作语句的参数,并将类型转换为适当的表类型


构造表字符串的方法不安全,因此我更改了它。

谢谢。它不起作用。我得到以下错误:
PG::cannotimprove:error:无法将类型item_行强制转换为item_行分区。p11_1
其中item_行是父表名(我使用表继承进行分区)现在我得到以下结果:
ActiveRecord::StatementInvalid(PG::DatatypeMismatch:ERROR:列“id”的类型为integer,但表达式的类型为item\u lines\u partitions.p11\u 1)
我假设这是因为该表中有许多列类型。非常感谢您的帮助。如果有帮助,我可以提供表架构,但通常我有文本、整数、浮点、日期和时间的数据类型。非常感谢:-)