如何在 flyway 创建的 postgresql jdbc 连接上设置时区?

How to set timezone on postgresql jdbc connection created by flyway?

我有一个 postgresql 数据库,我使用 flyway 部署了脚本。我使用 maven flyway 插件针对目标数据库启动数据库构建。在那个版本中,我有一些脚本可以执行以下操作:

create table my_table(
my_date_time timestamp with time zone not null
);

insert into my_table(my_date_time)
select '2000-01-01';

postgresql 数据库时区设置为 UTC。我的客户端机器(运行 是 maven/flyway 版本)是 运行ning CEST (UTC+2:00)。

当脚本 运行 时,数据库将上面的字符串解释为 '1999-12-31 22:00:00+00:00' 并将其写入存储。

flyway 创建的 jdbc 客户端连接似乎没有将其客户端时区设置为 UTC,而是采用时间戳字符串并将其解释为 '2000-01-01 00:00:00+ 02:00'.

如何在 flyway 创建的 jdbc 连接上将客户端时区设置为 UTC?有没有可以放在我的 flyway.conf 文件中的设置?

如果我将本地计算机时区更改为 UTC,问题就会消失,但我不想在我的开发工作站上这样做。

与其只给它一个 postgres 必须解释的日期,不如完全指定时间戳会更好:

insert into my_table(my_date_time)
select '2000-01-01T00:00:00+00';

如果这不可能,您可以尝试 运行 mvn 和 -Duser.timezone=UTC,但完全指定时间戳是更好的选择,因为它不会留下任何误解或错误配置的余地。

一位同事提出了以下建议

mvn -Duser.timezone=UTC flyway:migrate

另一种方法是在迁移脚本本身中设置会话时区

SET timezone TO 'UTC';