2012-07-24 70 views
0

我想在TIMESTAMP WITH TIME ZONE類型的表上有一列,但是它的默認值是插入行的時間。我們使用Liquibase,所以我想用標準的Liquibase語法來完成這個任務。是否可以使用Liquibase和PostgreSQL將列默認設置爲LOCALTIMESTAMP?

我希望這將是這樣的:

<changeSet author="chuck" id="2012-07-24.1"> 
    <addColumn tableName="foo"> 
     <column name="createdOn" type="timestamp" defaultValue="LOCALTIMESTAMP"> 
      <constraints nullable="false"/> 
     </column> 
    </addColumn> 
</changeSet> 

這將生成SQL:

ALTER TABLE foo ADD "createdOn" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT 'LOCALTIMESTAMP'; 

我可以修改此聲明,並刪除周圍LOCALTIMESTAMP單引號,它會在PSQL執行。

ALTER TABLE foo ADD "createdOn" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP; 

有沒有其他人遇到過Liquibase和PostgreSQL?我可以將此重寫爲解決方法,但想嘗試使用Liquibase的方法。

+0

狂野的猜測(沒有Liquibase的專家):你可以在這裏刪除雙引號嗎? 'defaultValue = LOCALTIMESTAMP'或者,如果這是不可能的,Liquibase會理解'defaultValue =「now():: timestamp」'? – 2012-07-25 00:32:38

+0

@ErwinBrandstetter:由於這是XML,所以不能刪除雙引號。 – user272735 2012-07-25 05:39:52

回答

1

使用defaultValueComputed進行函數調用。 defaultValue假設一個字符串值。

+0

@ErwinBrandstetter對正確的Postgres默認設置有正確的想法,這個答案有正確的Liquibase屬性。它最終顯示爲: cclark 2012-07-25 06:44:48

+1

@cclark:[LOCALTIMESTAMP](http://www.postgresql.org/docs/ current/interactive/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT)也是一個函數。由於歷史原因和標準遵從性,它不像其他功能那樣附加括號。使用'defaultValueComputed'它可能工作得很好。 – 2012-07-25 13:22:29

2

是的,defaultValueComputed的作品。

<column name="actiondate" type="timestamp with time zone" defaultValueComputed="current_timestamp"/> 
相關問題