PG SQL 10 устанавливает часовой пояс по умолчанию на UTC

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

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

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

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

введите здесь описание изображения

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

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


person hyphen    schedule 10.02.2019    source источник
comment
Вы переподключились?   -  person clamp    schedule 10.02.2019
comment
Я сделал, и я также перезагрузил сервер ..   -  person hyphen    schedule 10.02.2019


Ответы (2)


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

Чтобы преобразовать данные, вы можете действовать следующим образом:

SET timezone = 'UTC';
ALTER TABLE mytable ALTER timestampcol TYPE timestamp without time zone;
person Laurenz Albe    schedule 11.02.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;

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

person hyphen    schedule 10.02.2019