суббота, 8 ноября 2014 г.

Django. Pgbouncer. PostgreSQL schemas

Для работы django c Pgbouncer можно использовать библиотеку Django-PostgresPool

Если в проекте 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'}
}

'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',))

При возникновении ошибки:
ProgrammingError: autocommit cannot be used inside a transaction
Установите psycopg2 версии 2.4.1
pip install psycopg2==2.4.1

Комментариев нет:

Отправить комментарий