часовой пояс по умолчанию для postgres - PullRequest
73 голосов
/ 12 июля 2011

Я установил PostgreSQL 9, и время, которое он показывает, отстает от времени сервера на 1 час.

Бег Select NOW() показывает: 2011-07-12 11:51:50.453842+00

Дата сервера показывает: вт 12 июля 12:51:40 BST 2011

Это на 1 час позже, но часовой пояс, показанный в phppgadmin: TimeZone Etc / GMT0

Я попытался зайти в postgresql.conf и установить часовой пояс = GMT, затем запустить перезапуск, но без изменений.

Любые идеи, которые я думал, он использовал бы часовой пояс сервера, но, очевидно, нет?!

РЕШЕНИЕ !: Я установил на GMT раньше, и это был час позади ... после того, как поиск вокруг, оказывается, мне нужно было установить его на Европу / Лондон. Это учитывает +1 час в британское летнее время, GMT не!

Ответы [ 7 ]

88 голосов
/ 12 июля 2011

Часовой пояс является параметром сеанса. Таким образом, вы можете изменить часовой пояс для текущего сеанса.

См. Документ .

set timezone TO 'GMT';

Или, более точно следуя стандарту SQL, используйте команду SET TIME ZONE. Обратите внимание на два слова для «TIME ZONE», где в приведенном выше коде используется одно слово «timezone».

SET TIME ZONE 'UTC';

Документ объясняет разницу:

SET TIME ZONE расширяет синтаксис, определенный в стандарте SQL. Стандарт допускает только числовые смещения часовых поясов, в то время как PostgreSQL позволяет более гибкие спецификации часовых поясов. Все остальные функции SET являются расширениями PostgreSQL.

61 голосов
/ 14 августа 2015

Выберите часовой пояс из:

SELECT * FROM pg_timezone_names;

И подать пример:

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

Используйте имя вашей БД.

43 голосов
/ 12 июля 2012

Чтобы выполнить изменение часового пояса в Postgres 9.1, вы должны:

1 .- Искать соответствующий файл в /usr/share/postgresql/9.1/ в соответствующем файле.в моем случае это будет «America.txt», в нем найдите ближайший пункт к вашей зоне и скопируйте первые буквы в левом столбце.

Например: если вы находитесь в «Нью-Йорке»или "Панама" это будет "EST":

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

2 .- Раскомментируйте строку "часовой пояс" в файле postgresql.conf и укажите свой часовой пояс, как показано:

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

3 .- Перезапустить Postgres

32 голосов
/ 08 декабря 2014

принятый ответ от Мухаммед Усама правильный.

Имя параметра конфигурации

Этот ответ показывает, как задать параметр конфигурации, специфичный для Postgres, с помощью следующего:

SET timezone TO 'UTC';

… где timezone не является командой SQL, это имя параметра конфигурации.

См. документацию для этого .

Стандартная команда SQL

В качестве альтернативы, вы можете использовать SQLкоманда, определенная спецификацией SQL: SET TIME ZONE.В этом синтаксисе пара слов TIME ZONE заменяет «часовой пояс» (фактическая команда SQL в сравнении с именем параметра), и «TO» отсутствует.

SET TIME ZONE 'UTC';

И эта команда, и приведенная выше имеют одинаковыеэффект, чтобы установить значение только для текущего сеанса.Чтобы сделать изменение постоянным, см. ответ родного брата .

См. документацию для этого .

Название часового пояса

Вы можете указать правильное имя часового пояса .Большинство из них континент / регион.

SET TIME ZONE 'Africa/Casablanca';

… или…

SET TIME ZONE 'America/Montreal';

Избегайте 3 или 4-буквенных сокращений , таких как EST или IST, поскольку они не являются ни стандартизированными, ни уникальными.

Получить текущую зону

Чтобы увидеть текущий часовой пояс для сеанса, попробуйте любой из следующих операторов.Технически мы вызываем команду SHOW для отображения параметра времени выполнения.

SHOW timezone ;

… или…

SHOW time zone ;

США / Тихий океан

8 голосов
/ 07 сентября 2016

В дополнение к предыдущим ответам, если вы используете инструмент pgAdmin III , вы можете установить часовой пояс следующим образом:

  1. Открыть конфигурацию Postgres с помощью Инструменты>Конфигурация сервера> postgresql.conf
  2. Найдите запись часовой пояс и дважды щелкните, чтобы открыть
  3. Измените значение
  4. Перезагрузите сервер для примененияизменения конфигурации (кнопка воспроизведения сверху или через сервисы)

Postgres config in pgAdmin III

1 голос
/ 09 января 2018

Обратите внимание, что многие сторонние клиенты имеют собственные настройки часового пояса, перекрывающие любой сервер Postgres и \ или настройки сеанса.

например. если вы используете IntelliJ IDEA 2017.3 (или DataGrips), вы должны определить часовой пояс как:

«Свойства источника БД» -> вкладка «Дополнительно» -> «Параметры виртуальной машины»: -Duser.timezone = UTC + 06: 00

в противном случае вы увидите «UTC», независимо от того, что вы установили где-либо еще.

0 голосов
/ 16 января 2018

Возможно, это не связано с вопросом, но мне нужно было использовать CST, установить системный часовой пояс на желаемый tz (America / ...), а затем в postgresql conf установить значение часового пояса на 'localtime', и это сработало как текущее время печатает правильное время (Postgresql 9.5 на Ubuntu 16)

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