]> granicus.if.org Git - postgresql/commitdiff
psql: show cloned triggers in partitions
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 29 Jun 2018 15:40:36 +0000 (11:40 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 29 Jun 2018 15:53:22 +0000 (11:53 -0400)
In a partition, row triggers that had been cloned from their parent
partitioned table would not be listed at all in psql's \d, which could
surprise users, per insistent complaint from Ashutosh Bapat (though his
aim was elsewhere).  The simplest possible fix, suggested by Peter
Eisentraut, seems to be to list triggers marked as internal if they have
a row in pg_depend that points to some other trigger.

Author: Álvaro Herrera
Discussion: https://postgr.es/m/20180618165910.p26vhk7dpq65ix54@alvherre.pgsql

src/bin/psql/describe.c

index e5b3c1ebf9a6962c0a807adb1021636938665dac..6e085158573e38606dfddbf1254a528b3513b4da 100644 (file)
@@ -2713,7 +2713,11 @@ describeOneTableDetails(const char *schemaname,
                                                   pset.sversion >= 80300 ?
                                                   "t.tgconstraint <> 0 AS tgisinternal" :
                                                   "false AS tgisinternal"), oid);
-               if (pset.sversion >= 90000)
+               if (pset.sversion >= 110000)
+                       appendPQExpBuffer(&buf, "(NOT t.tgisinternal OR (t.tgisinternal AND t.tgenabled = 'D') \n"
+                                                         "    OR EXISTS (SELECT 1 FROM pg_catalog.pg_depend WHERE objid = t.oid \n"
+                                                         "        AND refclassid = 'pg_catalog.pg_trigger'::regclass))");
+               else if (pset.sversion >= 90000)
                        /* display/warn about disabled internal triggers */
                        appendPQExpBuffer(&buf, "(NOT t.tgisinternal OR (t.tgisinternal AND t.tgenabled = 'D'))");
                else if (pset.sversion >= 80300)