1. Mike Bayer
  2. sqlalchemy

Commits

Mike Bayer  committed ffa6f45

- Revised this very old issue where the Postgresql "get primary key"
reflection query were updated to take into account primary key constraints
that were renamed; the newer query fails on very old versions of
Postgresql such as version 7, so the old query is restored in those cases
when server_version_info < (8, 0) is detected. #2291

  • Participants
  • Parent commits 3e7caad
  • Branches master

Comments (0)

Files changed (2)

File doc/build/changelog/changelog_08.rst

View file
  • Ignore whitespace
     :version: 0.8.5
 
     .. change::
+        :tags: bug, postgresql
+        :tickets: 2291
+
+        Revised this very old issue where the Postgresql "get primary key"
+        reflection query were updated to take into account primary key constraints
+        that were renamed; the newer query fails on very old versions of
+        Postgresql such as version 7, so the old query is restored in those cases
+        when server_version_info < (8, 0) is detected.
+
+    .. change::
         :tags: bug, sql
         :tickets: 2957
         :versions: 0.9.3

File lib/sqlalchemy/dialects/postgresql/base.py

View file
  • Ignore whitespace
         table_oid = self.get_table_oid(connection, table_name, schema,
                                        info_cache=kw.get('info_cache'))
 
-        if self.server_version_info < (8, 4):
+        if self.server_version_info < (8, 0):
+            # the shortcoming of this query is that it will
+            # not detect a PK constraint that has been renamed.
+            # This query was removed with #2291, however it was reported
+            # that the newer queries do not work with PG 7 so here
+            # it is restored when old PG versions are detected.
+            PK_SQL = """
+              SELECT attname FROM pg_attribute
+              WHERE attrelid = (
+                 SELECT indexrelid FROM pg_index i
+                 WHERE i.indrelid = :table_oid
+                 AND i.indisprimary = 't')
+              ORDER BY attnum
+            """
+        elif self.server_version_info < (8, 4):
             # unnest() and generate_subscripts() both introduced in
             # version 8.4
             PK_SQL = """