2012-09-18 36 views
2

是否可以將now()定義爲postgresql 9.2中引入的tztsrange數據類型的起始值?我試圖通過改變表,默認值是,儘管總是相同使用此使用now()作爲postgresql中tztsrange的默認值9.2

ALTER TABLE test_table ALTER COLUMN tstz_range SET DEFAULT '[now,infinity]'::tstzrange; 

但這種表達now()被評估爲當前時間戳:

'["2012-09-18 15:00:47.334196+02",infinity]'::tstzrange; 

回答

6

如前所述in the documentation可以定義一個範圍與按照功能:

SELECT tstzrange(now(), 'infinity', '[)'); 
┌────────────────────────────────────────────┐ 
│     tstzrange     │ 
├────────────────────────────────────────────┤ 
│ ["2012-09-18 15:33:50.186351+00",infinity) │ 
└────────────────────────────────────────────┘ 

所以,你可以很容易地使用函數創建一個默認值:

CREATE TABLE plop (
    id serial PRIMARY KEY, 
    some_range tstzrange DEFAULT tstzrange(now(), 'infinity', '[)') 
); 
+0

非常感謝!我試圖定義自己的函數來返回tstzrange,但這個解決方案更加優雅。 –

相關問題