无效的输入语法 PLPGSQL 脚本

Invalid input syntax PLPGSQL script

我有一个触发器函数,用于审计在 table 上进行的交易。

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;
$$

但是我不断收到 "ERROR: invalid input syntax for integer: "triggerTable" 其中:PL/pgSQL function audit() line 3 at EXECUTE statement”(其中 trigger table 是触发此函数的 table)

我假设我执行查询的语法是错误的,但我无法确定是哪里。欢迎任何反馈

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

的占位符

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

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');
                               ^

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