0

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

4

2 回答 2

2

是的,defaultValueComputed 有效。

<column name="actiondate" type="timestamp with time zone" defaultValueComputed="current_timestamp"/>
于 2015-09-16T12:48:23.577 回答
1

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

于 2012-07-25T05:34:08.717 回答