我有一个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,问题就会消失,但我不希望在开发工作站上这样做。
4条答案
按热度按时间yqkkidmi1#
一位同事提出以下建议
qzwqbdag2#
与其只给它一个日期,postgres必须解释它,不如完整地指定时间戳:
如果这不可能,您可以尝试使用
-Duser.timezone=UTC
运行mvn,但是完整地指定时间戳是更好的选择,因为它不会留下误解或错误配置的空间。kxe2p93d3#
另一种方法是在迁移脚本本身中设置会话时区
第一个月
7kjnsjlb4#
我在脚本中使用flyway CLI。因此,在执行flyway命令之前为相应的环境变量设置正确的时区对我很有效: