2012-07-24 3 views
0

TIMESTAMP WITH TIME ZONE 형식의 테이블에 열을 갖고 싶지만 기본적으로 행이 삽입 된 시간으로 설정해야합니다. 우리는 Liquibase를 사용하므로 표준 Liquibase 구문을 사용하여이 작업을 수행하고 싶습니다. 나는 그의 모습 기대Liquibase 및 PostgreSQL을 사용하여 열 기본값을 LOCALTIMESTAMP로 설정할 수 있습니까?

:

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

내가이 문을 수정 및 LOCALTIMESTAMP 주위에 따옴표를 제거하고 psql의에서 실행할 수 있습니다

<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; 

누구나 Liquibase 및 PostgreSQL에서이 문제가 발생 했습니까? 이 문제를 해결 방법으로 재 작성했지만 Liquibase 방식으로 시도하고 싶었습니다.

+0

야생 추측 (Liquibase 전문가는 예외) : 여기서 큰 따옴표를 제거 할 수 있습니까? 'defaultValue = LOCALTIMESTAMP' 아니면, 가능하지 않다면, Liquibase는'defaultValue = "now() :: timestamp"'를 이해할 수 있습니까? –

+0

@ErwinBrandstetter : 큰 따옴표는 XML로 제거 할 수 없습니다. – user272735

답변

1

defaultValueComputed을 함수 호출에 사용하십시오. defaultValue은 문자열 값을 사용합니다.

+0

@ErwinBrandstetter는 적절한 Postgres 기본 설정에 대한 올바른 아이디어를 가지고 있습니다.이 답변에는 올바른 Liquibase 속성이 있습니다. 그것은 마치 다음과 같이 보입니다 : cclark

+1

@cclark : [LOCALTIMESTAMP] (http://www.postgresql.org/docs/ current/interactive/functions-datetime.html # FUNCTIONS-DATETIME-CURRENT)도 함수입니다. 역사적인 이유로 표준 준수를 위해 다른 기능처럼 괄호가 붙지 않습니다. 'defaultValueComputed'로 아마 잘 작동 할 것입니다. –

2

예, defaultValueComputed가 작동합니다.

<column name="actiondate" type="timestamp with time zone" defaultValueComputed="current_timestamp"/> 
관련 문제