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

hc8w905p  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(4)|浏览(159)

我有一个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构建)运行的是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,问题就会消失,但我不希望在开发工作站上这样做。

yqkkidmi

yqkkidmi1#

一位同事提出以下建议

mvn -Duser.timezone=UTC flyway:migrate
qzwqbdag

qzwqbdag2#

与其只给它一个日期,postgres必须解释它,不如完整地指定时间戳:

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

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

kxe2p93d

kxe2p93d3#

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

7kjnsjlb

7kjnsjlb4#

我在脚本中使用flyway CLI。因此,在执行flyway命令之前为相应的环境变量设置正确的时区对我很有效:

export TZ=GMT

相关问题