2013-01-08 63 views
0

我的問題是如何設置可變長度數組列中某個索引的默認值。我試圖將其中一個位置的值設置爲默認字符串'false'。類型可變長度數組列中的默認值Postgresql

原因是我希望能夠在查詢中有一個where子句來過濾位置值爲'true'的項目(我將特定的項目手動設置爲true),但是沒有其餘的數據默認值在該值上爲false我的查詢沒有獲取任何數據。

如果這是令人困惑讓我知道,我會盡量清除up..Thanks提前

+0

你真的應該爲這個表定義和樣本數據。 –

回答

2

一般來說,列默認是整個列 - 在你的情況下,整個陣列。

您必須爲此編寫觸發器。但你可能不需要這些。我引用你的問題:

...但沒有其餘的我的數據默認值爲false在該值 我的查詢沒有獲取任何數據。

你或許可以避開這一點,如果你查詢:

(arr[5] = 'true') IS NOT TRUE 

(其中包括有所有情況下的標誌是什麼,但 '真',甚至NULL)代替:


             
  
    arr[5] <> 'true' 
  

如果你需要這個查詢你可以用一個部分索引支持:

CREATE INDEX tbl_special_idx ON tbl (col1) -- potentially more columns 
WHERE (arr[5] = 'true') IS NOT TRUE; 

重要的部分是WHERE條款。您可以使用的列代替col1可能覆蓋整個查詢(尤其是在V9.2)有在您的查詢的附加條件......

+0

爲什麼不簡單地將'arr [5]不是真的'或者'arr [5]與DISTINCT'真''不同? –

+1

鏈接到文檔:http://www.postgresql.org/docs/current/static/functions-comparison.html –

+0

@IgorRomanchenko:沒有特別的原因。表達式'(arr [5] ='true')不是真的,而'arr [5]不等於'真''是等價的。 –