Fix ALTER TRIGGER ... RENAME, broken in WITH OIDS removal.
authorAndres Freund <andres@anarazel.de>
Mon, 21 Jan 2019 17:12:31 +0000 (09:12 -0800)
committerAndres Freund <andres@anarazel.de>
Mon, 21 Jan 2019 17:13:43 +0000 (09:13 -0800)
I (Andres) broke this in 578b229718e.

Author: Rushabh Lathia
Discussion: https://postgr.es/m/CAGPqQf04PywZX3sVQaF6H=oLiW9GJncRW+=e78vTy4MokEWcZw@mail.gmail.com

src/backend/commands/trigger.c
src/test/regress/expected/triggers.out
src/test/regress/sql/triggers.sql

index 2daffae8cd658409fdd243607245c7cbbdedfab5..5103f30c8f84d164a0aaad4db81d3043e3536fb3 100644 (file)
@@ -1721,14 +1721,14 @@ renametrig(RenameStmt *stmt)
                                NULL, 2, key);
    if (HeapTupleIsValid(tuple = systable_getnext(tgscan)))
    {
-       Form_pg_trigger trigform = (Form_pg_trigger) GETSTRUCT(tuple);
-
-       tgoid = trigform->oid;
+       Form_pg_trigger trigform;
 
        /*
         * Update pg_trigger tuple with new tgname.
         */
        tuple = heap_copytuple(tuple);  /* need a modifiable copy */
+       trigform = (Form_pg_trigger) GETSTRUCT(tuple);
+       tgoid = trigform->oid;
 
        namestrcpy(&trigform->tgname,
                   stmt->newname);
index e95e089317e9475d7e19cd36cd4f4a2703ece1a2..f561de92229ccf9fe23413c41b0d12fd452abf2d 100644 (file)
@@ -434,7 +434,21 @@ SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'
  CREATE TRIGGER modified_any BEFORE UPDATE OF a ON main_table FOR EACH ROW WHEN (old.* IS DISTINCT FROM new.*) EXECUTE PROCEDURE trigger_func('modified_any')
 (1 row)
 
-DROP TRIGGER modified_a ON main_table;
+-- Test RENAME TRIGGER
+ALTER TRIGGER modified_a ON main_table RENAME TO modified_modified_a;
+SELECT count(*) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
+ count 
+-------
+     0
+(1 row)
+
+SELECT count(*) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_modified_a';
+ count 
+-------
+     1
+(1 row)
+
+DROP TRIGGER modified_modified_a ON main_table;
 DROP TRIGGER modified_any ON main_table;
 DROP TRIGGER insert_a ON main_table;
 DROP TRIGGER delete_a ON main_table;
index 5336185ed25880979636143fa681ab9efb367825..60d1dc6f469d95dad1c8832ae6bab40e5c40814a 100644 (file)
@@ -284,7 +284,13 @@ SELECT * FROM main_table ORDER BY a, b;
 SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
 SELECT pg_get_triggerdef(oid, false) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
 SELECT pg_get_triggerdef(oid, true) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_any';
-DROP TRIGGER modified_a ON main_table;
+
+-- Test RENAME TRIGGER
+ALTER TRIGGER modified_a ON main_table RENAME TO modified_modified_a;
+SELECT count(*) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_a';
+SELECT count(*) FROM pg_trigger WHERE tgrelid = 'main_table'::regclass AND tgname = 'modified_modified_a';
+
+DROP TRIGGER modified_modified_a ON main_table;
 DROP TRIGGER modified_any ON main_table;
 DROP TRIGGER insert_a ON main_table;
 DROP TRIGGER delete_a ON main_table;