Для работы django c Pgbouncer можно использовать библиотеку Django-PostgresPool
Если в проекте django используется несколько схем для подключения к БД, то в настройку DATABASES необходимо добавить ключ 'OPTIONS' например:
'schema1,schema2' - перечисление используемых схем в БД
Однако, если используется пул соединений Pgbouncer эта опция работать не будет
Если в проекте django используется несколько схем для подключения к БД, то в настройку DATABASES необходимо добавить ключ 'OPTIONS' например:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'django',
'PASSWORD': 'django',
'HOST': '127.0.0.1',
'PORT': '5432',
'OPTIONS': {'options':'-c search_path=schema1,schema2'}
}
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'django',
'PASSWORD': 'django',
'HOST': '127.0.0.1',
'PORT': '5432',
'OPTIONS': {'options':'-c search_path=schema1,schema2'}
}
'schema1,schema2' - перечисление используемых схем в БД
Однако, если используется пул соединений Pgbouncer эта опция работать не будет
Для решения этой проблемы необходимо подключиться к сигналу connection_created. Для этого в модуле models.py достаточно разместить этот код
from django.dispatch import receiver
from django.db.backends.signals import connection_created
@receiver(connection_created)
def connection_created_handler(sender, **kwargs):
conn = kwargs.get('connection')
if conn is not None:
cursor = conn.cursor()
cursor.execute("SET search_path={}".format('schema1,schema2',))
from django.db.backends.signals import connection_created
@receiver(connection_created)
def connection_created_handler(sender, **kwargs):
conn = kwargs.get('connection')
if conn is not None:
cursor = conn.cursor()
cursor.execute("SET search_path={}".format('schema1,schema2',))
При возникновении ошибки:
ProgrammingError: autocommit cannot be used inside a transaction
Установите psycopg2 версии 2.4.1
pip install psycopg2==2.4.1
Комментариев нет:
Отправить комментарий