Перейти к основному содержимому

Файлы конфигурации даты/времени

примечание

Эта страница переведена при помощи нейросети GigaChat.

Поскольку сокращения часовых поясов плохо стандартизированы, PostgreSQL предоставляет средства для настройки набора сокращений, принимаемых во входных данных типа datetime. Существует два источника этих сокращений:

  1. Параметр времени выполнения TimeZone обычно устанавливается на имя записи в базе данных часовых поясов IANA. Если для этого пояса используются широко распространенные сокращения, они будут отображаться в данных IANA, и PostgreSQL будет отдавать предпочтение этим сокращениям со значениями, указанными в данных IANA. Например, если часовой пояс установлен на America/New_York, то EST будет пониматься как UTC-5, а EDT — как UTC-4. Эти сокращения IANA также будут использоваться в выводе даты и времени, если для параметра DateStyle установлен стиль, предпочитающий нечисловые сокращения часовых поясов.
  2. Если сокращение не найдено в текущем часовом поясе IANA, оно ищется в списке, указанном параметром времени выполнения timezone_abbreviations. Список timezone_abbreviations в основном полезен для того, чтобы ввод даты и времени мог распознавать сокращения для часовых поясов, отличных от текущего. Эти сокращения не будут использоваться в выводе даты и времени.

Хотя параметр timezone_abbreviations может быть изменен любым пользователем базы данных, возможные значения для него находятся под контролем администратора базы данных — на самом деле это имена файлов конфигурации, хранящихся в <...>/share/timezonesets/ в каталоге установки. Добавляя или изменяя файлы в этом каталоге, администратор может установить локальную политику для сокращений часовых поясов.

timezone_abbreviations можно установить на любое имя файла, найденное в <...>/share/timezonesets/, если имя файла состоит только из букв. Запрет на использование неалфавитных символов в timezone_abbreviations предотвращает чтение файлов вне целевого каталога, а также чтение резервных копий редактора и других посторонних файлов.

Файл аббревиатур часовых поясов может содержать пустые строки и комментарии, начинающиеся с #. Строки без комментариев должны иметь один из следующих форматов:

zone_abbreviation offset
zone_abbreviation offset D
zone_abbreviation time_zone_name
@INCLUDE file_name
@OVERRIDE

zone_abbreviation - это просто аббревиатура, которая определяется. offset - это целое число, указывающее эквивалентный сдвиг в секундах от UTC, положительное значение указывает восток от Гринвича, а отрицательное - запад. Например, -18000 будет означать пять часов к западу от Гринвича или стандартное время североамериканского восточного побережья. D указывает на то, что имя зоны представляет местное летнее время, а не стандартное время.

В качестве альтернативы можно указать time_zone_name, ссылаясь на имя зоны, определенное в базе данных часовых поясов IANA. Проверяется определение зоны, чтобы увидеть, используется ли аббревиатура в этой зоне или использовалось ранее, и если да, то используется соответствующее значение - то есть значение, которое было актуально во время определения значения метки времени, или значение, использовавшееся непосредственно перед этим, если оно не было актуальным в этот момент, или самое старое значение, если оно использовалось только после этого времени. Такое поведение необходимо для работы с аббревиатурами, смысл которых исторически менялся. Также допускается определять аббревиатуру через имя зоны, в которой это аббревиатура не появляется, использование аббревиатуры эквивалентно записи имени зоны.

Совет

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

Синтаксис @INCLUDE позволяет включать другой файл в каталоге <...>/share/timezonesets/. Включение может быть вложенным, до ограниченной глубины.

Синтаксис @OVERRIDE указывает на то, что последующие записи в файле могут переопределять предыдущие записи (обычно это записи, полученные из включенных файлов). Без этого конфликтующие определения одной и той же аббревиатуры часового пояса считаются ошибкой.

В установке без изменений файл Default содержит все непересекающиеся аббревиатуры часовых поясов для большей части мира. Дополнительные файлы Australia и India предоставляются для этих регионов: эти файлы сначала включают файл Default, а затем добавляют или изменяют аббревиатуры по мере необходимости.

Для справочных целей стандартная установка также содержит файлы Africa.txt, America.txt, и так далее, содержащие информацию о каждой аббревиатуре часового пояса, известном как используемое согласно базе данных часовых поясов IANA. Определения имен зон, найденные в этих файлах, могут быть скопированы и вставлены в пользовательский файл конфигурации по мере необходимости. Обратите внимание, что эти файлы не могут быть непосредственно указаны в качестве настроек timezone_abbreviations, из-за точки, встроенной в их имена.

Примечание

Если при чтении набора аббревиатур часовых поясов возникает ошибка, новое значение не применяется, а сохраняется старый набор. Если ошибка происходит во время запуска базы данных, запуск терпит неудачу.

Предупреждение

Аббревиатуры часовых поясов, определенные в файле конфигурации, заменяют значения, не относящиеся к часовому поясу, встроенные в PostgreSQL. Например, файл конфигурации определяет Australia (для стандартного времени Южной Австралии). Когда этот файл активен, SAT не будет распознаваться как аббревиатура для субботы.

Предупреждение

Если изменить файлы в <...>/share/timezonesets/, то придется делать резервные копии самостоятельно - обычная выгрузка базы данных не будет включать этот каталог.