[컴][DB] postgresql 에서 materialized view

postgres / postgresql 의 materialized view



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

  1. Materialized View Strategies Using PostgreSQL | The Hashrocket Blog : Materialized View 에 대한 예제를 볼 수 있다. / trigger 를 이용한 view 의 update 에 대한 이야기도 있다.
  2. Chapter 12: Materialized Views | dan chak
  3. How to Implement Materialized Views in MySQL / MS-SQL : My SQL 에서 Materialized View




References

  1. PostgreSQL: Documentation: 9.5: CREATE MATERIALIZED VIEW
  2. PostgreSQL: Documentation: 9.5: DROP MATERIALIZED VIEW


댓글 없음:

댓글 쓰기