我在PostgreSQL的人员表上有一个语句触发器,用于在更新人员表时刷新物化视图。其中一列是用于存储从PHP上传的图像的bytea。此列不在物化视图中。每当更新图像列时,人员表上都有一个行触发器来更新图像上传日期列。如果行触发器触发,如何防止触发语句触发器?PostgreSQL:如果只更新一个特定列,不要触发语句触发器
create or replace function person_photo_date_func() returns trigger as $$
begin
new.photo_utc := current_timestamp;
return new;
end;
$$ language plpgsql;
create trigger person_photo_date_tg
after update of photo on person
for each row execute procedure person_photo_date_func();
create or replace function refresh_mv() returns trigger as $$
begin
refresh materialized view vm_csr;
return null;
end
$$ language plpgsql security definer;
create trigger refresh_mat_views_person
after insert or update or delete or truncate
on person for each statement
execute procedure refresh_mv();
不理解您的流量或您的问题。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是[** START **]( http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)了解如何提高您的问题质量并获得更好的答案。 –
@JuanCarlosOropeza问题是非常具体的,但它的要求正确。我确实遇到了他的问题。 –
@我试着提供解决方案,但正如你所看到的那样,它变得越来越复杂。如果可能的话,我会将刷新物化视图的调用移动到应用程序逻辑而不是数据库逻辑。另外,用户是否有可能用相同的语句更新席位视图和照片中存在的某些人数据,即UPDATE person SET photo ='...',location ='...'?如果是这样,那么你的逻辑将跳过垫视图的刷新。如果您只有一个应用程序在数据库上执行更新,那么当您更好地确定更新内容和时间时,我会将mat视图刷新调用应用程序逻辑。 –