Materialized View
이 녀석은 물리적으로 저장되는 view 이다. 그러니 개념적으로는 table 과 다를바가 없다. 차이가 있다면,
create table as <query> 와 별 다를 바는 없다. 다만 create table as 는 table 을 만들고, create materialized view 는 materialized view 를 생성하는 것이다.
table 에 비해 materialized view 가 할 수 없는 것은
- "임시 materialized view"
- "OID 의 자동 생성"
은 안된다.
CREATE
아래처럼 materialized view 를 만들 수 있다.
CREATE MATERIALIZED VIEW mview_mymview AS SELECT t1.close_price * t1.acc_factor AS adj_price FROM ( SELECT date, code, close_price, float8mul(adj_factor) OVER (partition BY code ORDER BY date) AS acc_factor FROM sprice ) t1 -- index CREATE INDEX ON mview_adjprice (code, date);
그러면 아래와 같은 모습의 view 가 생성된다.
adj_price ----------- 23432 23000 65000 ...
pgAdmin 을 이용해서 확인할 수 있다.
Permission
혹시 임의로 pgAdmin 등에서 만든다면, owner 를 잘 설정하자. permission 이 안맞아서 사용할 때 에러가 발생할 수 있다.Refresh
REFRESH MATERIALIZED VIEW mview_adjprice;
See Also
- Materialized View Strategies Using PostgreSQL | The Hashrocket Blog : Materialized View 에 대한 예제를 볼 수 있다. / trigger 를 이용한 view 의 update 에 대한 이야기도 있다.
- Chapter 12: Materialized Views | dan chak:
- How to Implement Materialized Views in MySQL / MS-SQL : My SQL 에서 Materialized View
References
- PostgreSQL: Documentation: 9.5: CREATE MATERIALIZED VIEW
- PostgreSQL: Documentation: 9.5: DROP MATERIALIZED VIEW
댓글 없음:
댓글 쓰기