Лучшая практика для устранения различий между синхронизацией Now() и timezone.now() в базах данных и веб-рабочих?
У меня есть checkconstraint на модели django, применяемый на базе данных PostgreSQL:
from django.db import models
from django.db.models import CheckConstraint, Q, F
from django.db.models.functions import Now
class Event(models.Model):
mydate = models.DatetimeField()
class Meta:
constraints = [
CheckConstraint(
check = Q(mydate__lte=Now()),
name = 'check_my_date',
),
]
Ограничение гарантирует, что mydate
не может быть в будущем, но ограничивает его, чтобы оно было меньше, чем Now(), которое возвращает время начала транзакции на сервере PostgreSQL.
Я установил mydate
программно в приложении:
from django.utils import timezone
now = timezone.now()
myevent = Event.objects.create(mydate=now)
Однако это часто приводит к неудаче при проверке ограничения. Я предполагаю, что это происходит потому, что я использую Heroku, с отдельным PostgreSQL и рабочим (app) экземпляром. Временная метка PostgreSQL Now()
, по-видимому, на несколько секунд отстает от временной метки веб-рабочего.
Какова наилучшая практика синхронизации/разрешения этого конфликта?