diff options
author | Andres Freund <andres@anarazel.de> | 2019-01-21 09:12:31 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-01-21 09:13:43 -0800 |
commit | 8cc157b23413c21f229e376cb2982a2086655fc9 (patch) | |
tree | 0eac64c51c275c008bcdad39869092f31e2e2c6d /src | |
parent | 93507e67c9ca54026019ebec3026de35d30370f9 (diff) | |
download | postgresql-8cc157b23413c21f229e376cb2982a2086655fc9.tar.gz postgresql-8cc157b23413c21f229e376cb2982a2086655fc9.zip |
Fix ALTER TRIGGER ... RENAME, broken in WITH OIDS removal.
I (Andres) broke this in 578b229718e.
Author: Rushabh Lathia
Discussion: https://postgr.es/m/CAGPqQf04PywZX3sVQaF6H=oLiW9GJncRW+=e78vTy4MokEWcZw@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/trigger.c | 6 | ||||
-rw-r--r-- | src/test/regress/expected/triggers.out | 16 | ||||
-rw-r--r-- | src/test/regress/sql/triggers.sql | 8 |
3 files changed, 25 insertions, 5 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 2daffae8cd6..5103f30c8f8 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -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); diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index e95e089317e..f561de92229 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -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; diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index 5336185ed25..60d1dc6f469 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -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; |