Ответ 1
SELECT current_setting('TIMEZONE')
Это может быть использовано в запросе, однако это не дает численной разницы.
Ваше решение в порядке.
В моем веб-приложении хранятся все временные метки в формате UTC без часовых поясов. У меня есть оболочка /psql script, которая возвращает список последних логинов, и я хочу, чтобы script отображал время входа в локальный часовой пояс сервера (который может варьироваться в зависимости от того, где находится сервер и с летней экономией).
Чтобы получить интервал, представляющий разницу между часовым поясом сервера базы данных и UTC, я в настоящее время использую этот хак:
SELECT age(now() at time zone 'UTC', now());
Это работает, но есть ли более простой способ?
Здесь есть параметр конфигурации сервера, называемый "часовой пояс", который возвращает допустимую строку часового пояса, но я не думаю, что можно получить доступ к этим параметрам в запросе. (Я думаю, что отдельный вопрос, но ответ на него позволит решить проблему с часовым поясом.)
SELECT current_setting('TIMEZONE')
Это может быть использовано в запросе, однако это не дает численной разницы.
Ваше решение в порядке.
Чтобы получить разницу секунд в качестве целого числа, я использовал просто:
select extract( timezone from now() );