Подтвердить что ты не робот

Часовой пояс по умолчанию postgres

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

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

Дата сервера показывает: Tue Jul 12 12:51:40 BST 2011

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

Я попытался зайти в postgresql.conf и настроить

часовой пояс = GMT

затем запустить перезагрузку, но без изменений.

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

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

4b9b3361

Ответ 1

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

Смотрите документ.

set timezone TO 'GMT';

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

SET TIME ZONE 'UTC';

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

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

Ответ 2

Выберите timezone из:

SELECT * FROM pg_timezone_names;

И set, как показано в приведенном ниже примере:

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

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

Ответ 3

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

1.- Поиск в вашей папке "timezones" в/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

Ответ 4

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

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

Этот ответ показывает, как установить параметр конфигурации, специфичный для 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 ;

США /Pacific

Ответ 5

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

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

Конфигурация Postgres в pgAdmin III

Ответ 6

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

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

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

иначе вы увидите "UTC", несмотря на то, что вы установили где-то еще.

Ответ 7

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