]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix: fix ambiguous query to fetch enum details
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 22 May 2022 00:10:22 +0000 (02:10 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 24 May 2022 08:58:15 +0000 (10:58 +0200)
The previous query happened to work, but was relying on a joined table
to maintain the order, which is not a documented behaviour.

psycopg/psycopg/_typeinfo.py

index 1736913324cf71b820130f5c623960cc49e06cb2..9987ee5b2b7ed3da418cd39d07a014e1dba170e6 100644 (file)
@@ -323,17 +323,18 @@ class EnumInfo(TypeInfo):
         cls, conn: "Union[Connection[Any], AsyncConnection[Any]]"
     ) -> str:
         return """\
-SELECT
-    t.typname AS name, t.oid AS oid, t.typarray AS array_oid,
-    array_agg(x.enumlabel) AS labels
-FROM pg_type t
-LEFT JOIN (
-    SELECT e.enumtypid, e.enumlabel
-    FROM pg_enum e
+SELECT name, oid, array_oid, array_agg(label) AS labels
+FROM (
+    SELECT
+        t.typname AS name, t.oid AS oid, t.typarray AS array_oid,
+        e.enumlabel AS label
+    FROM pg_type t
+    LEFT JOIN  pg_enum e
+    ON e.enumtypid = t.oid
+    WHERE t.oid = %(name)s::regtype
     ORDER BY e.enumsortorder
-) x ON x.enumtypid = t.oid
-WHERE t.oid = %(name)s::regtype
-GROUP BY t.typname, t.oid, t.typarray
+) x
+GROUP BY name, oid, array_oid
 """