Как найти server_version в psycopg 3?

У меня есть этот тест в Django [1]:

from django.db import connection

def test_postgresql_version(self):
    postgresql_version = connection.cursor().connection.server_version
    if (postgresql_version >= 140000):
        pass
    else:
        raise NotImplementedError("postgresql version must be at least 14.0.")

Этот тест не прошел с psycopg3:

AttributeError: 'Connection' object has no attribute 'server_version'

Как мне проверить server_version в psycopg 3?

В Psycopg 3 (используется с Django 4+ при установке psycopg вместо psycopg2) атрибут server_version больше не доступен непосредственно на connection.cursor().connection. Вместо этого вам следует использовать объект info для подключения.

Измените свой тест для использования connection.info.server_version:

from django.db import connection

def test_postgresql_version(self):
    postgresql_version = connection.connection.info.server_version 
    if postgresql_version >= 140000:
        pass
    else:
        raise NotImplementedError("PostgreSQL version must be at least 14.0.")

используйте функцию, написанную в оболочке базы данных django, чтобы получить версию базы данных

from django.db import connection

database_version = connection.get_database_version()

это позволит абстрагироваться от использования подчеркивания psycopg3 или psycopg2, эта функция была введена в django 4.1.x и поддерживается более поздними версиями

В итоге мы использовали следующий тест:

from django.db import connection

def test_postgresql_version(self):
    postgresql_version = connection.cursor().connection.info.server_version
    if (postgresql_version >= 140000):
        pass
    else:
        raise NotImplementedError("postgresql version must be at least 14.0.")

Здесь использовано connection.info.server_version из ответа Анкура.

Вернуться на верх