是否可以使用Liquibase和PostgreSQL将列默认设置为LOCALTIMESTAMP?

时间:2012-07-24 23:16:28

标签: postgresql liquibase

我想在TIMESTAMP WITH TIME ZONE类型的表上有一列,但默认为插入行的时间。我们使用Liquibase,所以我想使用标准Liquibase语法来实现这一点。

我希望看起来像:

<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方式执行此操作。

2 个答案:

答案 0 :(得分:2)

是的,defaultValueComputed有效。

<column name="actiondate" type="timestamp with time zone" defaultValueComputed="current_timestamp"/>

答案 1 :(得分:1)

使用defaultValueComputed进行函数调用。 defaultValue假定字符串值。