PG SQL 10 установить часовой пояс по умолчанию на UTC - PullRequest
0 голосов
/ 10 февраля 2019

Мне нужно изменить конфигурацию базы данных, чтобы использовать UTC по умолчанию для экземпляра PostgreSQL10, размещенного на AWS RDS.Я хочу, чтобы он постоянно изменялся на уровне базы данных и никогда не возвращался ни к какому другому часовому поясу, несмотря ни на что.

Я пытался запустить это, но он показывает 0 обновленных строк:

ALTER DATABASE <my-db> SET timezone='UTC'; 

Я попытался присоединить пользовательскую группу параметров к БД в RDS и изменить записи следующим образом (также перезагружается после):

enter image description here

Независимо от того, что я делаю, когда язапустите select * from pg_settings where name = 'TimeZone'; или SHOW timezone, там будет показано «Америка / Чикаго».

Кажется, что это должно быть легко сделать, но это становится проблемой.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Если вы хотите сохранить свои временные метки в UTC и всегда хотите, чтобы база данных отправляла данные клиенту также в UTC, вам следует использовать тип данных timestamp without time zone, который не будет выполнять какую-либо обработку часового пояса для вас.Это было бы самое простое решение.

Чтобы преобразовать данные, вы могли бы поступить так:

SET timezone = 'UTC';
ALTER TABLE mytable ALTER timestampcol TYPE timestamp without time zone;
0 голосов
/ 10 февраля 2019

На основании этого dba.stackexchange.com вопроса.Очевидно, PG сохраняет временную метку во времени UTC, но затем преобразует ее в часовой пояс сеанса.Исходя из того, что я собрал, поскольку мои временные метки не включают информацию о часовом поясе, я должен сказать PG, что сохраняемый часовой пояс является UTC, а затем преобразовать его в любое местное время, так что-то вроде этого:

SELECT my_timestamp_in_utc AT TIME ZONE 'UTC' AT TIME ZONE 'America/Denver' as my_local_time FROM my_table;

Это немного многословно, но сейчас я пойду с этим.

...