psql: Support identity columns in sequence display
authorPeter Eisentraut <peter_e@gmx.net>
Fri, 28 Apr 2017 18:43:36 +0000 (14:43 -0400)
committerPeter Eisentraut <peter_e@gmx.net>
Fri, 28 Apr 2017 18:43:36 +0000 (14:43 -0400)
Where the footer for an owned serial sequence would say "Owned by", put
something analogous for a sequence belonging to an identity column.

Reported-by: Vitaly Burovoy <vitaly.burovoy@gmail.com>
src/bin/psql/describe.c

index 0f9f497c66441a77deabdba5ceac2bea9ea438b4..dbfc7339e574a9690d4fcadcaf03b55f18400513 100644 (file)
@@ -2006,7 +2006,8 @@ describeOneTableDetails(const char *schemaname,
        /* Get the column that owns this sequence */
        printfPQExpBuffer(&buf, "SELECT pg_catalog.quote_ident(nspname) || '.' ||"
                          "\n   pg_catalog.quote_ident(relname) || '.' ||"
-                         "\n   pg_catalog.quote_ident(attname)"
+                         "\n   pg_catalog.quote_ident(attname),"
+                         "\n   d.deptype"
                          "\nFROM pg_catalog.pg_class c"
                    "\nINNER JOIN pg_catalog.pg_depend d ON c.oid=d.refobjid"
             "\nINNER JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace"
@@ -2016,7 +2017,7 @@ describeOneTableDetails(const char *schemaname,
               "\nWHERE d.classid='pg_catalog.pg_class'::pg_catalog.regclass"
             "\n AND d.refclassid='pg_catalog.pg_class'::pg_catalog.regclass"
                          "\n AND d.objid=%s"
-                         "\n AND d.deptype='a'",
+                         "\n AND d.deptype IN ('a', 'i')",
                          oid);
 
        result = PSQLexec(buf.data);
@@ -2024,9 +2025,19 @@ describeOneTableDetails(const char *schemaname,
            goto error_return;
        else if (PQntuples(result) == 1)
        {
-           printfPQExpBuffer(&buf, _("Owned by: %s"),
-                             PQgetvalue(result, 0, 0));
-           printTableAddFooter(&cont, buf.data);
+           switch (PQgetvalue(result, 0, 1)[0])
+           {
+               case 'a':
+                   printfPQExpBuffer(&buf, _("Owned by: %s"),
+                                     PQgetvalue(result, 0, 0));
+                   printTableAddFooter(&cont, buf.data);
+                   break;
+               case 'i':
+                   printfPQExpBuffer(&buf, _("Sequence for identity column: %s"),
+                                     PQgetvalue(result, 0, 0));
+                   printTableAddFooter(&cont, buf.data);
+                   break;
+           }
        }
 
        /*