Я хочу обновить строку в таблице master_table_info
с последней отметкой времени при каждом обновлении некоторых других таблиц.Каждая строка в таблице соответствует другой таблице.Я создал эту функцию, но не могу интерпретировать TG_TABLE_NAME
как значение переменной, а не как новый столбец.Я, таким образом, получаю ошибку column some_table does not exist
.Как мне интерпретировать его как значение?
CREATE OR REPLACE FUNCTION master_table_timestamp()
RETURNS TRIGGER AS
$$
BEGIN
EXECUTE format('
UPDATE master_table_info
SET updated_at = NOW()
WHERE table_name = %I', TG_TABLE_NAME);
RETURN NULL;
END;
$$
language plpgsql;
CREATE TRIGGER master_table_timestamp
BEFORE UPDATE ON some_table
EXECUTE PROCEDURE master_table_timestamp();
РЕДАКТИРОВАТЬ
Основываясь на ответах / комментариях и чтении документации по триггеру, японял, что я должен использовать TG_TABLE_NAME
и перейти на триггер AFTER
.Однако изменение таблицы с помощью триггера не приводит к изменениям master_table_info
.Что может быть не так?
CREATE OR REPLACE FUNCTION master_table_timestamp()
RETURNS TRIGGER AS
$$
BEGIN
UPDATE master_table_info
SET updated_at = NOW()
WHERE table_name = TG_TABLE_NAME;
RETURN new;
END;
$$
language plpgsql;
CREATE TRIGGER master_table_timestamp
AFTER UPDATE ON some_table
EXECUTE PROCEDURE master_table_timestamp();
2-е редактирование
Этот код в моем редактировании выше (основан на помощи из ответов) является правильным.Мне просто нужно было принудительно обновить таблицу вручную, чтобы она правильно отображалась.