2015-05-17 2 views
0

У меня есть функция триггера, которая собирается проводить аудит транзакций, сделанных на таблице.Неверный входной синтаксис 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 функция аудита() строка 3 в EXECUTE заявление» (Где триггер таблицы является таблица, которая вызвала этот function)

Я полагаю, что синтаксис моего запроса выполнения неверен, но я не могу изолировать его. Любая обратная связь будет приветствоваться

ответ

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

Это выглядит как первый столбец таблицы аудита является целым числом (возможно, идентификатор), но вы толкаете имя таблицы там.

+0

Спасибо, у меня есть поле идентификатора автоинкремента, и я не включил его. – user3277403

0

Вы передаете четыре значения для трех заполнителей. Я предполагаю, что «аудит» должен быть заполнителем для TG_TABLE_NAME?

+0

Глупая ошибка от моего имени. Обновлена ​​вставка, чтобы иметь три значения; однако я получаю эту ошибку. ОШИБКА: недействительный синтаксис ввода для целого: «covenant» Где: функция аудита PL/pgSQL (3) в операторе EXECUTE – user3277403

Смежные вопросы