Простой триггер, объединяющий TG_TABLE_NAME и now () SQL - PullRequest
0 голосов
/ 22 сентября 2018

Я бы хотел иметь одну функцию триггера для обновления <table_name>.date_updated до now().Я использую TG_TABLE_NAME в операторе update, так как у меня есть много таблиц, которые будут вызывать эту функцию триггера.Однако - я упускаю что-то простое, поскольку я получаю ошибку relation "tg_table_name" does not exist всякий раз, когда я пытаюсь \copy данных в свои таблицы.

Вот моя триггерная функция:

create or replace function table_updated() 
returns trigger as 
$body$
begin 
    update TG_TABLE_NAME
    set NEW.date_updated = now();
end
$body$
language plpgsql;

create trigger "updateDate"
before update or insert on <table_name>
for each row execute procedure table_updated();

Iиспользую Postgres версии 10.5.

Если я правильно понимаю, мне нужно как-то реализовать execute, но я не уверен, как.

1 Ответ

0 голосов
/ 22 сентября 2018

Хорошо, это смехотворно просто, но оставим это для других людей, только начинающих с базами данных на случай, если у них возникнет та же проблема.Вам не нужно указывать таблицу, которая обновляется в функции, так как триггер уже назначен этой таблице.Он знает, что ссылается / обновляет себя.

create or replace function table_updated() 
returns trigger as 
$body$
begin 
    new.date_updated = now();
    return new;
end
$body$
language plpgsql;

Если кто-то может объяснить это более логично, чем я, пожалуйста, не стесняйтесь меня поправлять!

...