2010-08-02 76 views
1

PostgreSQL中的視圖在每次更改下面的表之一時會完全重新計算?PostgreSQL彙總視圖

更確切地說,如果我有表votes的聚合視圖,在票表中進行任何更改時,是否需要重新計算視圖?

如果我期望經常更改votes表,聚合視圖有什麼替代方法?我需要簡單查詢的多對數時間複雜度。

+0

我對PostgreSQL特別不瞭解,但SQL Server和Oracle在執行CREATE VIEW語句時捕獲表,所以是 - 如果VOTES表發生更改,那麼您需要刷新視圖... – 2010-08-02 01:21:44

回答

2

普通視圖是真的只不過是存儲SELECT語句更多。它沒有將實際的信息存儲在一個靜態表中 - 這是一個物化視圖(Postgres目前沒有,並且你必須roll your own)。它將在某種意義上「每次重新計算」,因爲它不存儲計算的數據。

如果要存儲複雜的計算,請檢查previous link以瞭解如何進行物化視圖。

編輯:如果像OMG Ponies說的那樣,你在談論ALTER TABLE在底層表上 - 那麼它很容易... Postgres不會讓你改變在VIEW中使用的列的定義而不刪除先查看。

+0

+1:我同意視圖存儲SELECTs,但OP詢問他們是否運行ALTER TABLE語句來添加/編輯一列 - PostgreSQL視圖將保持同步嗎?假設'SELECT * ...' - 至少,這就是我讀這個問題的原因。 – 2010-08-02 02:04:17

+1

我不認爲他在談論ALTER TABLE,我認爲這只是談論改變表中的數據。 – rfusca 2010-08-02 02:05:27

+1

是的,我在談論改變表中的數據。 – stralep 2010-08-02 08:18:37

0

你可以使用PostgreSQL的物化視圖。

物化視圖在PostgreSQL中當然是可能的。由於PostgreSQL功能強大的PL/pgSQL語言和功能觸發系統,物化視圖實現起來很容易。我將研究在PostgreSQL中實現物化視圖的幾種方法。在Postgres的(和其他RDBMS的,我所知道的)

link text

+0

Postgres沒有本地的Materialized View語法,這並沒有解決OP的問題... – 2010-08-02 01:25:39