#django #postgresql #django-timezone
#django #postgresql #django-часовой пояс
Вопрос:
Итак, у меня есть некоторая путаница относительно Use_Tz в Django.
При первом запуске проекта для USE_TZ было установлено значение True, а для USE_I18N также было установлено значение True.
Однако на прошлой неделе было решено установить для этих настроек значение False. Согласно приведенным здесь документам, Postgresql должен иметь возможность автоматически переключаться между True и False в зависимости от settings.py файл.
Однако поля даты и времени в моих таблицах показывают отметку часового пояса 01 в конце.
Кроме того, когда я захожу в базу данных напрямую, используя команду d survey_server_app_activitylog
, я вижу следующее:
date_reg | timestamp with time zone |
Все поля с датой и временем отображают одну и ту же запись. Но я считаю, что они должны быть установлены как timestamp without time zone
Итак, что дает? Я полностью неправильно интерпретирую USE_TZ = False? Нужно ли вручную устанавливать столбцы в базе данных postgres?
Ответ №1:
Смотрите раздел документации по часовому поясу, посвященный конкретно PostgreSQL:
Серверная часть PostgreSQL хранит datetimes как
timestamp with time zone
. На практике это означает, что он преобразует даты из часового пояса соединения в UTC при хранении и из UTC в часовой пояс соединения при извлечении.Как следствие, если вы используете PostgreSQL, вы можете свободно переключаться между
USE_TZ = False
иUSE_TZ = True
. Часовой пояс подключения к базе данных будет установлен наTIME_ZONE
илиUTC
соответственно, так что Django получает правильные даты и времени во всех случаях. Вам не нужно выполнять какие-либо преобразования данных.
Это отвечает на ваш конкретный вопрос о том, почему тип столбца не изменился. Неясно, какую проблему это на самом деле представляет для вас, поэтому сложно дать дополнительные советы. Если вы попытаетесь изменить тип столбца за пределами Django, я бы не ожидал корректного поведения.
Комментарии:
1. Возможно, я неправильно это интерпретирую. Итак, я прав, говоря, что PostgreSQL всегда, всегда установлен с
timestamp with time zone?
, но, если это так, то настройка Django USE_TZ False / True не будет иметь абсолютно никакого эффекта, если не указан часовой пояс; другими словами, по умолчанию всегда будет UTC, если USE_TZ = False.2. @Nathan: Да, так будет всегда
timestamp with time zone
. ЕслиTIME_ZONE
параметр не указан, Django будет использовать значение по умолчанию,America/Chicago
а неUTC
, как описано здесь .3. Хорошо, спасибо за вашу помощь. Думаю, мне придется вручную настроить базу данных postgresql так, чтобы она не использовала временную метку.