从 Liquibase XML 在 PostgreSQL 中创建带时区的时间戳

Pet*_*ter 4 postgresql liquibase

我有一个 Liquibase 迁移 XML 文件,它创建具有该datetime类型的列。

<createTable tableName="foo">
    <column name="bar" type="datetime"/>
</createTable>
Run Code Online (Sandbox Code Playgroud)

我今天惊愕地意识到这些是在没有时区的情况下创建的(timestamp without time zone在 PostgreSQL 中),而且似乎没有任何可以使用的 Liquibase 类型会给你一个timestamp with time zone. 除了<sql>在最初创建表后有一个像这样改变表的块之外,还有什么方法可以解决这个问题:

<sql>
alter table foo alter column bar type timestamp with time zone;
</sql>
Run Code Online (Sandbox Code Playgroud)

谢谢。

Žel*_*lić 7

TL;DR:使用timestamp with time zone

<column name="bar" type="timestamp with time zone"/>
Run Code Online (Sandbox Code Playgroud)

Liquibasedatetime会自动转换为目标数据库的时间戳类型,但无法指定时区。

Liquibase 将接受timestamp with time zone并将其作为本机类型(不进行转换)传递,但由于它是 SQL 标准类型,因此它无论如何都会被任何标准数据库(包括 PostgreSQL)接受。

timestamptz是特定于 PostgreSQL 的相同数据类型的缩写。它不便携。