Поддерживает ли YugabyteDB Django, даже если функция SAVEPOINTS пока не поддерживается?

У нас есть приложение 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, похоже, не поддерживает SAVEPOINTS сегодня, как мы можем обойти эту ошибку Django?

[DISCLAIMER: Этот вопрос был впервые задан пользователем YugabyteDB по электронной почте]

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

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

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

Вернуться на верх