PostgreSQL View / Materialized View
Düzeltme Öner

View / Materialized View

PostgreSQL’de oluşturulan bir view’da herhangi bir karmaşıklık düzeyindeki sorgu view olarak kaydedilip isimlendirilebilir. Örneğin aşağıdaki view, iki tablodan ihtiyaç duyulan kolonları getirir.

CREATE VIEW myview AS
    SELECT city, temp_lo, temp_hi, prcp, date, location
        FROM weather, cities
        WHERE city = name;

SELECT * FROM myview;

View’lar, özellikle çok kullanılan sorguların kullanıcı tarafından yeniden yazılmak zorunda kalınmadan sorgulama yapmasına yarar. View çeşitli tablolardaki çeşitli kolonlardan oluşabileceği gibi başka viewlardan da kolonlar içerebilir. Bir view, select kullanarak her çağrıldığında tanımındaki tablolarda bulunan veriyi çağrı anında yeniden sorgular.

Verilerin çok nadir değiştiği (ve kullanım amacı gereği sorgulama sonucunun dönmesi çok uzun süren) tablolardan derlenmiş view’ların daha hızlı çalışabilmesi için diske kaydedilmesi ihtiyacını karşılamak amacıyla özelleştirilmiş bir view türü olan MATERIALIZED VIEW bulunmaktadır. Bir materialized view, yaratılma anında bir kere sorgulanır ve her çağrılmada bu snapshot gösterilir, bu sebeple diskte saklanır, ama çok büyük sonuç tablolarının çok hızlı çağrılmasını sağlar.

CREATE MATERIALIZED VIEW mymatview AS SELECT * FROM mytab;

Eğer kaynak tablolardan gelen verilerde değişiklik varsa REFRESH edilerek yeniden derlenir ve güncellenir. REFRESH ifadesi materialized view’ın içeriğini değiştirir. Refresh işlemini sadece view’ın sahibi tarafından yapabilir.

REFRESH MATERIALIZED VIEW mymatview;

Bir materialized view üzerinde concurrently anahtar kelimesini kullanabilmek için view içindeki kolonları kullanan en az bir UNIQUE index oluşturulmuş olmalıdır. Bu index o kolondaki tüm satırları içermeli, bir ifade (expression) ya da WHERE bloğu ile süzülmüş bir veri seti üzerinde bulunmamalıdır.

Diğer bir seçenek de REFRESH MATERIALIZED VIEW … WITH NO DATA ifadesidir. Bir materialized view ilk oluşturulma anında verileri tablolardan çekerek diske yazılır. Eğer materialized view’ın oluşturulma anında diske yazılması istenmiyorsa sonuna WITH NO DATA eklenir.

REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name
    [ WITH [ NO ] DATA ]
Tags: PostgreSQL