Существует ли проблема с преобразованием TIMESTAMPTZ в Central Africa Time (CAT) PostgreSQL? - PullRequest
0 голосов
/ 16 октября 2019

В одном из наших развертываний PostgreSQL 11.4 в Конго используется часовой пояс CAT (Африка / Кигали +02) и один из наших дросселей функции при попытке преобразовать введенные человеком временные метки в фактические TIMESTAMPTZ данные.

Дляпример:

SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ;
ERROR:  invalid input syntax for type timestamp with time zone: "2019-10-17 00:00:00 CAT"
LINE 2: SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ
               ^
SQL state: 22007
Character: 9

Но когда я пытаюсь использовать CEST (в Центральной Европе, также +02), это работает.

SELECT '2019-10-17 00:00:00 CEST'::TIMESTAMPTZ;
"2019-10-17 00:00:00+02"

Кстати, конвертация из эпох в CAT также работает

select to_timestamp(1571263200);
"2019-10-17 00:00:00+02"

Версия: "PostgreSQL 11.4 (Ubuntu 11.4-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit" в Ubuntu 18.04.2 LTS

1 Ответ

3 голосов
/ 16 октября 2019

По какой-то причине «CAT» недопустим для ввода по умолчанию, возможно, кто-то посчитал это двусмысленным или что-то в этом роде. Вы можете добавить строку

CAT      7200    # Central Africa Time

в файл "$ SHAREDIR / timezonesets / Default", чтобы сделать эту работу.

Или вы можете создать файл "$ SHAREDIR / timezonesets / Africa"с содержанием:

@INCLUDE Default
@OVERRIDE
CAT      7200    # Central Africa Time

А затем установите параметр timezone_abbreviations на «Африка».

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

Или вы можете предварительно обработать ввод данных пользователем, чтобы заменить 'CAT' на 'Africa / Kigali'.

Кстати, конвертация из эпох в CAT также работает

select to_timestamp(1571263200);
"2019-10-17 00:00:00+02"

'CAT' не появляется в вашем примере. Так что не понятно, к чему это пример.

...