Hi, Philip, I verified your patch on my Ubuntu 24.04 and it works as expected. The "make check" passed. Also, the code change looks good to me.
Regards, Steven ________________________________ From: Philip Alger <[email protected]> Sent: Tuesday, November 04, 2025 11:36 To: pgsql-hackers <[email protected]> Subject: [PATCH] Add pretty formatting to pg_get_triggerdef Hello Hackers, Currently, `pg_get_triggerdef` includes a "pretty" flag, but it does not actually format the `CREATE TRIGGER` statement in a "pretty" way. Unlike `pg_get_viewdef`, `pg_get_ruledef`, and `pg_get_indexdef`, the purpose of pretty formatting has been to remove the schema name so it can be used by the `\d` psql comment to display triggers associated with a view or table, as shown below: postgres=# \d main_table Table "public.main_table" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | | b | integer | | | Indexes: "main_table_a_key" UNIQUE CONSTRAINT, btree (a) Triggers: foofoo AFTER INSERT ON main_table FOR EACH STATEMENT EXECUTE FUNCTION trigger_func('foo_bar') foo_bar BEFORE INSERT ON main_table FOR EACH STATEMENT EXECUTE FUNCTION trigger_func('foo_bar') bar_fooAFTER DELETE ON main_table FOR EACH ROW WHEN ((old.a = 123)) EXECUTE FUNCTION trigger_func('foo_bar') This patch introduces true pretty formatting to `pg_get_triggerdef`. Additionally, it creates a new function specifically for the `\d` psql command, as that command requires schema removal and a single line statement. With this patch, when the `pretty` parameter is set to `true`, `pg_get_triggerdef` now displays a formatted output, consistent with `pg_get_viewdef`, `pg_get_ruledef`, and `pg_get_indexdef`: postgres=# select pg_get_triggerdef(12345, true); pg_get_triggerdef -------------------------------------------------- CREATE TRIGGER some_trig_foobar AFTER UPDATE + ON some_t + FOR EACH ROW + WHEN (NOT new.some_col) + EXECUTE FUNCTION dummy_update_func('foobar') (1 row) When the `pretty` flag is `false`, the function's behavior remains unchanged from the original implementation: postgres=# select pg_get_triggerdef(47901, false); pg_get_triggerdef --------------------------------------------------------------------------------------------------------------------------------------------------- CREATE TRIGGER some_trig_foobar AFTER UPDATE ON public.some_t FOR EACH ROW WHEN ((NOT new.some_col)) EXECUTE FUNCTION dummy_update_func('foobar') (1 row) -- Best, Phil Alger
