Поддерживает ли 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.