| From: | Philip Alger <paalger0(at)gmail(dot)com> |
|---|---|
| To: | pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | [PATCH] Add pretty formatting to pg_get_triggerdef |
| Date: | 2025-11-04 03:36:58 |
| Message-ID: | CAPXBC8Lpc935p6DFj1Vh=D8_izZvFEqXobhLkoTxkMvUufG8sw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
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
| Attachment | Content-Type | Size |
|---|---|---|
| v1-0001-Add-pretty-formatting-to-pg_get_triggerdef.patch | application/octet-stream | 11.8 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Joshua Shanks | 2025-11-04 05:15:25 | Re: [PATCH] Add error message for out-of-memory in passwordFromFile() |
| Previous Message | Peter Smith | 2025-11-04 03:35:29 | Re: DOCS: What SGML markup to use for user objects like tables, columns, etc? |