Skip to content

Commit 4bad548

Browse files
committed
psql: add separate \d display for disabled system triggers
Previously if you disabled all triggers, only user triggers would show as disabled Per report from Andres Freund
1 parent d613861 commit 4bad548

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

src/bin/psql/describe.c

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2090,15 +2090,19 @@ describeOneTableDetails(const char *schemaname,
20902090
printfPQExpBuffer(&buf,
20912091
"SELECT t.tgname, "
20922092
"pg_catalog.pg_get_triggerdef(t.oid%s), "
2093-
"t.tgenabled\n"
2093+
"t.tgenabled, %s\n"
20942094
"FROM pg_catalog.pg_trigger t\n"
20952095
"WHERE t.tgrelid = '%s' AND ",
20962096
(pset.sversion >= 90000 ? ", true" : ""),
2097-
oid);
2097+
(pset.sversion >= 90000 ? "t.tgisinternal" :
2098+
pset.sversion >= 80300 ?
2099+
"t.tgconstraint <> 0 AS tgisinternal" :
2100+
"false AS tgisinternal"), oid);
20982101
if (pset.sversion >= 90000)
2099-
appendPQExpBufferStr(&buf, "NOT t.tgisinternal");
2102+
/* display/warn about disabled internal triggers */
2103+
appendPQExpBuffer(&buf, "(NOT t.tgisinternal OR (t.tgisinternal AND t.tgenabled = 'D'))");
21002104
else if (pset.sversion >= 80300)
2101-
appendPQExpBufferStr(&buf, "t.tgconstraint = 0");
2105+
appendPQExpBufferStr(&buf, "(t.tgconstraint = 0 OR (t.tgconstraint <> 0 AND t.tgenabled = 'D'))");
21022106
else
21032107
appendPQExpBufferStr(&buf,
21042108
"(NOT tgisconstraint "
@@ -2124,7 +2128,7 @@ describeOneTableDetails(const char *schemaname,
21242128
* disabled triggers and the two special ALWAYS and REPLICA
21252129
* configurations.
21262130
*/
2127-
for (category = 0; category < 4; category++)
2131+
for (category = 0; category <= 4; category++)
21282132
{
21292133
have_heading = false;
21302134
for (i = 0; i < tuples; i++)
@@ -2133,11 +2137,13 @@ describeOneTableDetails(const char *schemaname,
21332137
const char *tgdef;
21342138
const char *usingpos;
21352139
const char *tgenabled;
2140+
const char *tgisinternal;
21362141

21372142
/*
21382143
* Check if this trigger falls into the current category
21392144
*/
21402145
tgenabled = PQgetvalue(result, i, 2);
2146+
tgisinternal = PQgetvalue(result, i, 3);
21412147
list_trigger = false;
21422148
switch (category)
21432149
{
@@ -2146,14 +2152,20 @@ describeOneTableDetails(const char *schemaname,
21462152
list_trigger = true;
21472153
break;
21482154
case 1:
2149-
if (*tgenabled == 'D' || *tgenabled == 'f')
2155+
if ((*tgenabled == 'D' || *tgenabled == 'f') &&
2156+
*tgisinternal == 'f')
21502157
list_trigger = true;
21512158
break;
21522159
case 2:
2153-
if (*tgenabled == 'A')
2160+
if ((*tgenabled == 'D' || *tgenabled == 'f') &&
2161+
*tgisinternal == 't')
21542162
list_trigger = true;
21552163
break;
21562164
case 3:
2165+
if (*tgenabled == 'A')
2166+
list_trigger = true;
2167+
break;
2168+
case 4:
21572169
if (*tgenabled == 'R')
21582170
list_trigger = true;
21592171
break;
@@ -2170,12 +2182,18 @@ describeOneTableDetails(const char *schemaname,
21702182
printfPQExpBuffer(&buf, _("Triggers:"));
21712183
break;
21722184
case 1:
2173-
printfPQExpBuffer(&buf, _("Disabled triggers:"));
2185+
if (pset.sversion >= 80300)
2186+
printfPQExpBuffer(&buf, _("Disabled user triggers:"));
2187+
else
2188+
printfPQExpBuffer(&buf, _("Disabled triggers:"));
21742189
break;
21752190
case 2:
2176-
printfPQExpBuffer(&buf, _("Triggers firing always:"));
2191+
printfPQExpBuffer(&buf, _("Disabled internal triggers:"));
21772192
break;
21782193
case 3:
2194+
printfPQExpBuffer(&buf, _("Triggers firing always:"));
2195+
break;
2196+
case 4:
21792197
printfPQExpBuffer(&buf, _("Triggers firing on replica only:"));
21802198
break;
21812199

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy