Использование пользовательских сходств триграмм с Django, Postgres и PgBouncer
Я хочу скорректировать pg_trgm.similarity_threshold некоторые из моих запросов. Но поскольку я использую PgBouncer (в режиме объединения транзакций) для обеспечения доступа к моей базе данных Postgres, я хочу быть уверен, что, когда я закончу, значение сеанса будет возвращено к значению по умолчанию.
Сработает ли это?
from django.db import connection, transaction
from myapp.models import Something
def do_something(name):
full_query = """
select *
from myapp_something
where name %% %s
"""
with transaction.atomic():
with connection.cursor() as cursor:
cursor.execute("set local pg_trgm.similarity_threshold = 0.5")
return list(Something.objects.raw(full_query, name))
Задан другой вопрос... гарантирует ли блок транзакций, что курсор и Something.objects.raw() используют одно и то же соединение?
Возможно, вы можете просто обернуть все это в запрос с помощью:
Something.objects.alias(
similarity = TrigramSimilarity('name', name)
).filter(similarity__gt=0.5).order_by('-similarity')
это также позволяет вам использовать Django ORM.