psql物化視圖自動更新

更新物化視圖示例

CREATE TABLE model.test (
  id SERIAL PRIMARY KEY,
  name VARCHAR(60)
);

. 創建物化視圖

CREATE MATERIALIZED VIEW model.test_materialized_view AS
  SELECT * FROM model.test;

. 創建唯一索引,因爲 CONCURRENTLY 同步更新需要唯一索引

CREATE UNIQUE INDEX test_materialized_view_index ON model.test_materialized_view(id);

. 同步更新,但是需要觸發,不能向 oracle 那種可以自動觸發更新

REFRESH MATERIALIZED VIEW CONCURRENTLY model.test_materialized_view;

. 創建函數執行同步更新和觸發器執行函數

create or replace function update_test_materialized_view() returns trigger as $$
declare
begin
  REFRESH MATERIALIZED VIEW CONCURRENTLY model.test_materialized_view;
  return new;
end;
$$ language plpgsql;
CREATE TRIGGER update_test_materialized_view AFTER UPDATE ON model.test FOR EACH STATEMENT EXECUTE PROCEDURE  update_test_materialized_view();
CREATE TRIGGER update_test_materialized_view AFTER UPDATE ON model.test FOR EACH STATEMENT EXECUTE PROCEDURE  update_test_materialized_view();
CREATE TRIGGER update_test_materialized_view AFTER UPDATE ON model.test FOR EACH STATEMENT EXECUTE PROCEDURE  update_test_materialized_view();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章