无效的输入语法PLPGSQL脚本

时间:2015-05-17 10:18:42

标签: postgresql plpgsql

我有一个触发器函数,用于审计在表上进行的事务。

CREATE or REPLACE FUNCTION audit()
  returns trigger
  language plpgsql
as $$
begin
EXECUTE FORMAT ('INSERT INTO %I.audit VALUES (%L,%L,%L)',TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP, now());
 RETURN NEW;
end;
$$

但是我一直得到"错误:整数的输入语法无效:" triggerTable"   其中:PL / pgSQL函数audit()在EXECUTE语句的第3行" (触发表是触发此功能的表)

我是否认为执行查询的语法错误,但我无法隔离在哪里。欢迎任何反馈

2 个答案:

答案 0 :(得分:3)

问题在于转换到目标表。某些目标列是整数,但您在那里推送文本。这是同样的错误:

postgres=# create table foo(a int);
CREATE TABLE

postgres=# insert into foo values('AHOJ');
ERROR:  invalid input syntax for integer: "AHOJ"
LINE 1: insert into foo values('AHOJ');
                               ^

看起来审计表的第一列是整数(可能是id),但你在那里推表名。

答案 1 :(得分:0)

您正在为三个占位符传递四个值。我认为"审计"应该是TG_TABLE_NAME的占位符吗?