#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, поддерживающую точку сохранения.