无效的输入语法 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 名称推到那里。
我有一个触发器函数,用于审计在 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 名称推到那里。