Локальное смещение часового пояса в PostgreSQL

В моем веб-приложении хранятся все временные метки в формате UTC без часовых поясов. У меня есть оболочка /psql script, которая возвращает список последних логинов, и я хочу, чтобы script отображал время входа в локальный часовой пояс сервера (который может варьироваться в зависимости от того, где находится сервер и с летней экономией).

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

SELECT age(now() at time zone 'UTC', now());

Это работает, но есть ли более простой способ?

Здесь есть параметр конфигурации сервера, называемый "часовой пояс", который возвращает допустимую строку часового пояса, но я не думаю, что можно получить доступ к этим параметрам в запросе. (Я думаю, что отдельный вопрос, но ответ на него позволит решить проблему с часовым поясом.)

Ответ 1

SELECT  current_setting('TIMEZONE')

Это может быть использовано в запросе, однако это не дает численной разницы.

Ваше решение в порядке.

Ответ 2

Чтобы получить разницу секунд в качестве целого числа, я использовал просто:

select extract( timezone from now() );