postgresql:在动态命令中使用 NEW.* 执行 EXECUTE

Joh*_*Doe 2 postgresql inheritance triggers partitioning plpgsql

我尝试为 postgresql 8.3 创建一个 plpgsql 触发器,它在通过 id 列插入之前自动对表进行分区

如果目标表不存在,它将被创建,然后插入到那里

所以我用这样的新表名创建了插入语句

exec_insert := 'INSERT INTO '||TG_TABLE_SCHEMA||'.'||TG_RELNAME||'_'||destinationid||' VALUES('||NEW.*||')';
EXECUTE exec_insert;
Run Code Online (Sandbox Code Playgroud)

导致错误:

ERROR:  NEW used in query that is not in a rule
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 甚至可以在 EXECUTE 中使用 NEW 还是语句中有错误?
  2. 如果这是不可能的,有人知道如何从 NEW 中获取值,以便我可以在语句中使用它们吗?我唯一想到的是使用 information_schema 检索主表的列名,然后尝试动态访问 NEW 的值 - 我也不知道如何:(

谢谢

小智 5

你可以用

...
_sql varchar(100)= 'insert into some_table values ($1.*)';
...
execute _sql using new;
...
Run Code Online (Sandbox Code Playgroud)

我发现这隐藏在一些偏远地区:D。我正在使用 9.1