Поддерживает ли YugabyteDB Django, даже если функция СОХРАНЕНИЯ точек еще не поддерживается?

#django #yugabyte-db

Вопрос:

Есть настройка приложения Django для общения с YugabyteDB, но во время выполнения миграции мы сталкиваемся со следующей ошибкой:

 Traceback (most recent call last):
  File "/opt/env/lib/python3.6/site-packages/django/contrib/contenttypes/models.py", line 54, in get_for_model
    ct = self.get(app_label=opts.app_label, model=opts.model_name)
  File "/opt/env/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/opt/env/lib/python3.6/site-packages/django/db/models/query.py", line 380, in get
    self.model._meta.object_name
__fake__.DoesNotExist: ContentType matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/env/lib/python3.6/site-packages/django/db/models/query.py", line 464, in get_or_create
    return self.get(**lookup), False
  File "/opt/env/lib/python3.6/site-packages/django/db/models/query.py", line 380, in get
    self.model._meta.object_name
__fake__.DoesNotExist: ContentType matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/env/lib/python3.6/site-packages/django/db/backends/utils.py", line 62, in execute
    return self.cursor.execute(sql)
  File "/opt/env/lib/python3.6/site-packages/django_prometheus/db/common.py", line 63, in execute
    return super(CursorWrapper, self).execute(*args, **kwargs)
psycopg2.errors.FeatureNotSupported: SAVEPOINT <transaction> not supported yet
LINE 1: SAVEPOINT "s140500455238528_x1"
        ^
HINT:  See https://github.com/YugaByte/yugabyte-db/issues/1125. Click ' ' on the description to raise its priority
 

Поскольку YugabyteDB, похоже, сегодня не поддерживает ТОЧКИ СОХРАНЕНИЯ, как мы можем обойти эту ошибку Django?

[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот вопрос был впервые задан пользователем YugabyteDB по электронной почте]

Ответ №1:

YugabyteDB будет поддерживать функцию точки сохранения в более новых выпусках. Так что эта проблема может быть не замечена.

Тем не менее, мы создали серверную часть Django для YugabyteDB. Это обеспечивает совместимость YugabyteDB с Django. Пока новые выпуски не попадут в рабочие среды, мы отключили поддержку точек сохранения в серверной части, т. е. серверная часть сообщает Django, что она не поддерживает точки сохранения (uses_savepoints = False), и поэтому Django не будет использовать точки сохранения автоматически, и это исключение не должно быть замечено. Однако атомарность самой внешней транзакции по-прежнему гарантируется.

Кроме того, не следует явно использовать API точки сохранения, так как это будет невозможно, если вы не используете версию YB, поддерживающую точку сохранения.