人テーブルが更新されるたびにマテリアライズドビューをリフレッシュするPostgreSQLのpersonテーブルに文トリガがあります。カラムの1つは、PHPからアップロードされた画像を保存するためのbyteaです。この列はマテリアライズド・ビューにはありません。人物表に行トリガーがあり、イメージ列が更新されるたびにイメージアップロード日付列を更新します。行トリガーが起動すると、ステートメントトリガーが起動しないようにするにはどうすればよいですか?PostgreSQL:特定のカラムが1つしか更新されていない場合、ステートメントトリガを起動しない
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 [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を向上させ、より良い回答を得る方法を学ぶことができます。 –
@JuanCarlosOropeza問題は非常に具体的ですが、正しく尋ねられます。私は彼の問題を抱えています。 –
@Andy私は解決策を提供しようとしましたが、わかりましたが、複雑になっています。可能であれば、リフレッシュ・マテリアライズド・ビューの呼び出しをDBロジックの代わりにアプリ・ロジックに移動します。また、同じステートメントでマット・ビューと写真に存在する人物データを更新することも可能ですか?つまり、UPDATE person SET photo = '...'、location = '...'?そうであれば、あなたのロジックはマット・ビューのリフレッシュをスキップします。 DB上で更新を行うアプリケーションが1つしかない場合は、更新された内容といつ更新されたかを把握しているときに、マット・ビューの更新をアプリケーション・ロジックに呼び出すようにします。 –