Заметил, что у меня в базе данных на PostgreSQL, все поля, которые заполняются по умолчанию текущим временем (DEFAULT LOCALTIMESTAMP), отстают от реального времени на 10 часов. В 19:45 запрос
вернулselect localtimestamp, current_timestamp
Проверил время на сервере – оно правильное. Значит дело в настройках СУБД. Так как PostgreSQL я увидел первый раз совсем недавно, то пришлось заглянуть в документацию. Оказалось, что проблема в ненастроенном параметре "timezone", который задает часовой пояс для вывода и ввода значений времени."11.10.2019 9:45:56" "2019-10-11 09:45:56.884309-07"
Посмотреть значение параметра "timezone" для текущей сессии можно выполнив команду:
Выполнив ее, я убедился, что часовой пояс у меня стоит по умолчанию – "US/Pacific". Получается, что админ после установки сервера не настроил параметр "timezone" и моя задача исправить эту оплошность.SHOW timezone
Для начала выберем интересующий меня часовой пояс. Список часовых поясов можно посмотреть с помощью SQL запроса:
Мне для Минска подошел часовой пояс "Europe/Minsk". Его я и буду указывать ниже в примерах (вы замените на свой часовой пояс, например на "Europe/Moscow"). Хотя, как потом оказалось, по поводу имени часового пояса можно не заморачиваться. Этот параметр "всеядный" и вместо "Europe/Minsk" можно писать "+3", "UTC-3", "EEST-3"...SELECT * FROM pg_timezone_names;
Существует три варианта настройки часового пояса:
1. Для текущей сессии. Делается с помощью SQL-команды "SET TIME ZONE" или "SET TIMEZONE TO". Например:
илиSET TIME ZONE 'Europe/Minsk'
2. Для конкретной базы данных. Делается с помощью SQL-команды "ALTER DATABASE". Например:SET TIMEZONE TO 'Europe/Minsk'
где "db_name" – это имя базы данных. Что бы ощутить результат выполнения этой команды, необходимо переподключиться к базе данных.ALTER DATABASE db_name SET timezone TO 'Europe/Minsk'
3. Для всего сервера. Делается двумя способами:
- вручную задать параметр "timezone = 'Europe/Minsk'" в файле postgresql.conf
- с помощью SQL-команды "ALTER SYSTEM" записать значение параметра в файл postgresql.auto.conf (он считывается сервером после postgresql.conf, поэтому имеет приоритет). Например:
ALTER SYSTEM SET timezone TO 'Europe/Minsk'
После настройки часового пояса снова выполним запрос "select localtimestamp, current_timestamp":
Теперь время корректное."11.10.2019 19:47:19" "2019-10-11 19:47:19.82261+03"
Комментариев нет:
Отправить комментарий