У меня есть таблица, содержащая идентификатор, статус, дату добавления. Id и dateadded по умолчанию имеют целые значения nextval и current_timestamp соответственно. Затем у меня есть триггер, который вызывает функцию при вставке, обновлении или удалении. В функции все, что он делает, это резервное копирование и отслеживание изменений в таблице состояний. Этот метод успешно работал, когда в таблицу добавлялось более одного поля. В таблице состояния я добавляю только поле состояния и позволяю базе данных позаботиться о двух других полях, и я получаю сообщение об ошибке. Похоже, мне нужно сделать что-то другое в функции? Я добавляю данные в эти таблицы, используя python для автоматизации, и пытался добавить запись в таблицу вручную с той же ошибкой.
Error while fetching data from PostgreSQL INSERT has more expressions than target columns
LINE 2: (TG_OP, NEW.*)
^
QUERY: INSERT INTO api_audit.d_status_list (id, status, dateadded) VALUES
(TG_OP, NEW.*)
CONTEXT: PL/pgSQL function api_input.d_status_list_func() line 4 at SQL statement
Код функции:
create function d_status_list_func() returns trigger
language plpgsql
as
$$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO api_audit.d_status_list (id, status, dateadded) VALUES
(TG_OP, NEW.*);
RETURN NEW;
ELSIF TG_OP = 'UPDATE' THEN
INSERT INTO api_audit.d_status_list (id, status, dateadded) VALUES
(TG_OP, NEW.*);
RETURN NEW;
ELSIF TG_OP = 'DELETE' THEN
INSERT INTO api_audit.d_status_list (id, status, dateadded) VALUES
(TG_OP, OLD.*);
RETURN OLD;
END IF;
END;
$$;
alter function d_status_list_func() owner to blahblah;
Любая помощь очень ценится.