Я создаю таблицу для отслеживания изменений, но она возвращает следующую ошибку:
"(psycopg2.InternalError) элемент управления достиг конца процедуры запуска
без возврата контекста: PL / pgSQL функция change_trigger () "
Всякий раз, когда я выполняю любое из следующих действий: insert
, change
или update
См. Ниже таблицу и функцию триггера
Создать таблицу для регистрации изменений
Create schema logging;
Create table logging.history(
id serial,
tstamp timestamp default now (),
schemaname text,
tabname text,
operation text,
who text default current_user,
new_val json,
old_val json);
Создать функцию
CREATE function
change_trigger()
RETURNS trigger as $$
BEGIN
IF TG_OP = 'Insert'
THEN
Insert into logging.history (tabname, schemaname, operation, new_val)
Values (TG_TABLE_NAME,TG_TABLE_SCHEMA, TG_OP, row_to_json(NEW));
RETURN NEW;
ELSIF TG_OP = 'Update'
THEN
Insert into logging.history (tabname, schemaname, operation, new_val, old_val)
Values (TG_TABLE_NAME,TG_TABLE_SCHEMA, TG_OP, row_to_json(NEW), row_to_json(OLD));
RETURN NEW;
ELSIF TG_OP = 'Delete'
THEN
Insert into logging.history (tabname, schemaname, operation, old_val)
Values (TG_TABLE_NAME,TG_TABLE_SCHEMA, TG_OP, row_to_json(OLD));
RETURN OLD;
END IF;
END;
$$ LANGUAGE 'plpgsql';
Функция связывания триггера с таблицей:
CREATE TRIGGER t AFTER INSERT OR UPDATE OR DELETE ON mytemp
FOR EACH ROW EXECUTE PROCEDURE change_trigger();
Например, когда я выполняю следующее:
INSERT into mytemp(column1)
VALUES ('id2323900')
ошибка возвращается как:
управление достигло конца процедуры запуска без возврата контекста:
Функция PL / pgSQL change_trigger ()