From: | Jim Jones <jim(dot)jones(at)uni-muenster(dot)de> |
---|---|
To: | Philip Alger <paalger0(at)gmail(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | Cary Huang <cary(dot)huang(at)highgo(dot)ca>, jian he <jian(dot)universality(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: [PATCH] Add pg_get_trigger_ddl() to retrieve the CREATE TRIGGER statement |
Date: | 2025-10-16 08:45:53 |
Message-ID: | e585409b-39b9-481e-8665-5bf7b21f6534@uni-muenster.de |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Phil,
Thanks for the patch.
On 10/15/25 23:25, Philip Alger wrote:
> I've updated v4, attached here.
The function fails to look up triggers with quoted names
db=# CREATE TABLE t (c int);
CREATE TABLE
db=# CREATE FUNCTION trgf()
RETURNS trigger LANGUAGE plpgsql AS $$
BEGIN
RETURN NULL;
END; $$;
CREATE FUNCTION
db=# CREATE TRIGGER "Foo"
BEFORE INSERT ON t
FOR EACH STATEMENT EXECUTE PROCEDURE trgf();
CREATE TRIGGER
db=# SELECT pg_get_trigger_ddl('t','"Foo"');
ERROR: trigger ""Foo"" for table "t" does not exist
The same applies for unicode trigger names:
db=# CREATE TRIGGER "π"
BEFORE INSERT ON t
FOR EACH STATEMENT EXECUTE PROCEDURE trgf();
CREATE TRIGGER
db=# SELECT pg_get_trigger_ddl('t','"π"');
ERROR: trigger ""π"" for table "t" does not exist
db=# \d t
Table "public.t"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
c | integer | | |
Triggers:
"Foo" BEFORE INSERT ON t FOR EACH STATEMENT EXECUTE FUNCTION trgf()
"π" BEFORE INSERT ON t FOR EACH STATEMENT EXECUTE FUNCTION trgf()
(it does work if we omit the double quotes)
postgres=# SELECT pg_get_trigger_ddl('t','Foo');
pg_get_trigger_ddl
--------------------------------------------------------------------------------------------
CREATE TRIGGER "Foo" BEFORE INSERT ON public.t FOR EACH STATEMENT
EXECUTE FUNCTION trgf();
(1 row)
postgres=# SELECT pg_get_trigger_ddl('t','π');
pg_get_trigger_ddl
-------------------------------------------------------------------------------------------
CREATE TRIGGER "π" BEFORE INSERT ON public.t FOR EACH STATEMENT
EXECUTE FUNCTION trgf();
(1 row)
I don't think it's the expected behaviour. For instance,
pg_get_viewdef() sees it differently (opposite approach):
postgres=# CREATE TEMPORARY VIEW "MyView" AS SELECT 42;
CREATE VIEW
postgres=# SELECT pg_get_viewdef('"MyView"');
pg_get_viewdef
---------------------------
SELECT 42 AS "?column?";
(1 row)
postgres=# SELECT pg_get_viewdef('MyView');
ERROR: relation "myview" does not exist
Best, Jim
From | Date | Subject | |
---|---|---|---|
Next Message | Hayato Kuroda (Fujitsu) | 2025-10-16 08:46:39 | RE: POC: enable logical decoding when wal_level = 'replica' without a server restart |
Previous Message | Amit Kapila | 2025-10-16 08:41:02 | Re: POC: enable logical decoding when wal_level = 'replica' without a server restart |