2012-11-13 40 views
1

如果我將查詢結果保存爲意見與包含查詢結果的表相比,它是否會佔用更多空間:
關於視圖的另一個問題是,我可以基於存儲爲視圖的查詢結果來創建新的查詢嗎?views - 多少空間?

回答

3

問題1

要回答你的第一個問題,你不能查詢結果存儲爲意見,但你可以使用PostgreSQL的trigger功能實現類似的功能。

PostgreSQL本地支持創建views,但不創建materialized views(存儲結果的視圖) - 但可以使用觸發器來處理。請參閱http://wiki.postgresql.org/wiki/Materialized_Views

視圖不佔用RAM(「內存」)。

問題2

並回答第二個問題,要更新PostgreSQL的視圖,您需要使用CREATE RULE - http://www.postgresql.org/docs/devel/static/sql-createrule.html

創建規則定義應用到新規則指定的表或視圖。創建或替換規則將創建一個新的規則,或替換同一個表的同名現有規則。

+0

謝謝。如果我使用'trigger'並在我的數據庫中有查詢結果,那麼我的硬盤上的實際存儲量是多少?它會少於具有相同數據的表嗎? –

+2

@ f.ashouri:'trigger'在很大程度上並不佔用額外的「磁盤存儲空間」,因爲它實際上不是「物化視圖」。所有'trigger'都是在運行時在特定事件發生時引發特定查詢,例如查詢從預先創建的視圖中請求結果。請參閱http://michael.otacoo.com/postgresql-2/postgres-trigger-for-beginners/在撰寫本文時,PostgreSQL不支持真正的「實體化視圖」,所以在視圖上使用'trigger' '本質上是一種解決方法。 –

+1

我應該指出,物化視圖在PostgreSQL 9.3中可用。 –

5

視圖不存儲查詢結果,它們存儲查詢。

有些RDBMS允許的方式來存儲查詢結果(對於一些查詢):這就是所謂的Oracle索引視圖中SQL Server物化視圖

PostgreSQL不支持這些(儘管@CalvinCheng提到,你可以使用觸發器或規則來模擬這些)。

是的,您可以在查詢中使用視圖。然而,視圖僅僅是一種通過名稱來引用複雜查詢的便捷方式,而不是存儲其結果的方式。

+1

@ f.ashouri:物化視圖存儲查詢定義和結果,簡單視圖只存儲查詢定義。 'PostgreSQL'不支持實體化視圖。 – Quassnoi

+1

@ f.ashouri當你說「內存」時,如果你的意思是內存或磁盤存儲,它一點也不清楚。如果你的意思是RAM:視圖對RAM沒有影響;就好像你編寫了在子查詢中定義視圖的底層'SELECT'。 –

+2

@Quassnoi - 'PostgreSQL'確實不支持實體化視圖。但是,可以通過使用觸發器來實現物化視圖。請參閱http://wiki.postgresql.org/wiki/Materialized_Views –

0

PostgreSQL視圖是保存的查詢。一旦創建,從視圖中選擇與從原始查詢中選擇完全一樣,它每次都會返回查詢。所以意見不佔用記憶。

不能將查詢結果存儲爲視圖,視圖只是查詢,但可以使用物化視圖實現類似的功能。物化視圖只會按需更新。其次,整個物化視圖必須更新;沒有辦法只更新一個陳舊的行。

因此,在這種情況下,只要發生會使行無效的更改,就必須急切地更新視圖。它可以通過觸發器完成。