我有一个触发器函数,用于审计在表上进行的事务。
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行" (触发表是触发此功能的表)
我是否认为执行查询的语法错误,但我无法隔离在哪里。欢迎任何反馈
答案 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的占位符吗?