我想在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方式执行此操作。
答案 0 :(得分:2)
是的,defaultValueComputed有效。
<column name="actiondate" type="timestamp with time zone" defaultValueComputed="current_timestamp"/>
答案 1 :(得分:1)
使用defaultValueComputed进行函数调用。 defaultValue
假定字符串值。