ローカルテーブルAが更新されるたびに、リモートサーバ上のMATERIALIZED VIEWをリフレッシュするために、以下のトリガとトリガ機能の設定があります。 MVは、ローカル表Aの外部表から作成されます。トリガーが実行された後、マテリアライズド・ビューは更新されますが、UPDATEが発生する前の状態にのみ更新されます。なぜこれが当てはまるのか分かりません。トリガー機能は、UPDATEがコミットされる前に実行されますが、それはトリガーの 'AFTER'部分のためのものでなければなりません。または、MVリフレッシュが高速(?)ですが、pg_sleepを追加しても結果は変わりません。UPDATEでリモートマテリアライズドビューをリフレッシュするトリガー機能
CREATE OR REPLACE FUNCTION public.refresh_remote_mv()
RETURNS TRIGGER AS
$func$
BEGIN
PERFORM dblink_connect('remote_server');
PERFORM dblink_exec(
$$
REFRESH MATERIALIZED VIEW m_config;
$$);
PERFORM dblink_disconnect();
RETURN NULL;
END
$func$ LANGUAGE plpsql;
トリガー:
ためだCREATE TRIGGER tr_remote_refresh
AFTER UPDATE ON m_config
EXECUTE PROCEDURE refresh_remote_mv()
洞察をいただきありがとうございます!私はdblink_send_query https://www.postgresql.org/docs/9.5/static/contrib-dblink-send-query.htmlに行った – Cyrus