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;
CONCURRENTLY
anahtar kelimesi kullanılır. Öte yandan refresh işleminin süresi de uzar.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 ]