Как установить часовой пояс для соединения postgresql jdbc, созданного flyway? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть база данных 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 'и записывает это в хранилище.

Похоже, что клиентское соединение jdbc, созданное flyway, не устанавливает часовой пояс клиента в UTC, но принимает строку timstamp и интерпретирует ее как'2000-01-01 00: 00: 00 + 02: 00 '.

Как я могу установить часовой пояс клиента на соединении jdbc, созданном flyway для UTC? Есть ли параметр, который можно поместить в мой файл flyway.conf?

Если я изменю часовой пояс локального компьютера на UTC, проблема исчезнет, ​​но я бы не стал этого делать на моей рабочей станции разработки.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Коллега предложил следующее

mvn -Duser.timezone=UTC flyway:migrate
0 голосов
/ 08 октября 2019

Вместо того, чтобы просто указывать дату, которую postgres должен интерпретировать, было бы лучше полностью указать временную метку:

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

Если это невозможно, вы можете попробовать запустить mvn с -Duser.timezone=UTC но лучше указать временную метку, так как она не оставляет места для неправильной интерпретации или неправильной конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...