Opened 7 years ago

Closed 5 years ago

#11285 closed Bug (fixed)

postgresql server version as a static variable

Reported by: findepi Owned by: nobody
Component: Database layer (models, ORM) Version: 1.0
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


In django.db.backends.postgresql.base and django.db.backends.postgresql_psycopg2.base modules there is a code:

cursor = self.connection.cursor()
if set_tz:
    cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
    if not hasattr(self, '_version'):
        self.__class__._version = get_version(cursor)
    if self._version[0:2] < (8, 0):

It means that the server version is checked only at the first connection. I understand that django does not support and maybe will never support multiple different db connections from one process, but this may brake things even in case of database failover
E.g. at one network address there may be postgresql servers of different version available.

Change History (5)

comment:1 Changed 7 years ago by Alex

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

comment:2 Changed 5 years ago by julien

  • Severity set to Normal
  • Type set to New feature

comment:3 Changed 5 years ago by thejaswi_puthraya

  • Component changed from Uncategorized to Database layer (models, ORM)
  • Easy pickings unset
  • UI/UX unset

comment:4 Changed 5 years ago by ramiro

  • Type changed from New feature to Bug

comment:5 Changed 5 years ago by ramiro

  • Resolution set to fixed
  • Status changed from new to closed

In [16439]:

Fixed #11065, #11285 -- Streamlined PostgreSQL version detection, fixing incompatibility with multi-db. Thanks findepi for the report.

Changed our internal representation of the PostgreSQL version from tuples to
integers as used by libpq and psycopg2. This simplifies version comparison

Also, using the associated libpq/psycopg2 API allows to remove the need for
manually issuing in-band SELECT version() SQL queries to obtain the server
version (or at least reduce its number if version of psycopg2 in use is older
than 2.0.12). Refs #10509.

Note: See TracTickets for help on using tickets.
Back to Top