Есть ли способ, которым я могу заставить Postgres (я использую Navicat, но продемонстрирую через инструмент командной строки) вести себя так же, как Rails, когда дело доходит до часовых поясов и UTC?
Rails, кажется, совершает магию, которая заставляет Postgres вести себя в UTC-стиле; тогда как через командную строку (или Navicat) он использует системный часовой пояс. Это сбивает с толку, потому что результаты зависят от того, выполняю ли я запрос в Ruby / Rails или в консоли.
Я все еще борюсь с часовыми поясами в Postgres, но наличие Rails и консоли, демонстрирующих другое поведение, сводит с ума. Могу ли я исправить это?
Вот один пример (различные выходные значения):
-- in postgress:
# select ('2018-11-06' at time zone 'utc')::timestamptz;
timezone
------------------------
2018-11-06 08:00:00-08
(1 row)
-- in rails console
> ApplicationRecord.execute("select ('2018-11-06' at time zone 'utc')::timestamptz").first
(0.5ms) select ('2018-11-06' at time zone 'utc')::timestamptz
=> #<OpenStruct timezone="2018-11-06 00:00:00+00">
Они оба отформатированы по-разному (-00
против -08
) и, что еще более запутанно, они возвращают фактическое разное время.
Пример Postgres возвращает результат за 16 часов до Rails!