bugfix of drop trigger if exists with schema

This commit is contained in:
mentoswang
2023-03-16 14:58:58 +08:00
parent b8b1c67e7e
commit 8bd74a266c
3 changed files with 298 additions and 129 deletions

View File

@ -1336,19 +1336,19 @@ static ObjectAddress get_object_address_relobject(ObjectType objtype, List* objn
address.classId = TriggerRelationId; address.classId = TriggerRelationId;
address.objectId = get_trigger_oid(reloid, depname, missing_ok); address.objectId = get_trigger_oid(reloid, depname, missing_ok);
address.objectSubId = 0; address.objectSubId = 0;
break;
case OBJECT_TABCONSTRAINT:
address.classId = ConstraintRelationId;
address.objectId = get_relation_constraint_oid(reloid, depname, missing_ok);
address.objectSubId = 0;
/* TODO: comments*/ /* TODO: comments*/
if (schemaname != NULL) { if (OidIsValid(address.objectId) && schemaname != NULL) {
Oid relNamespaceId = RelationGetNamespace(relation); Oid relNamespaceId = RelationGetNamespace(relation);
if (relNamespaceId != get_namespace_oid(schemaname, false)) { if (relNamespaceId != get_namespace_oid(schemaname, false)) {
ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("trigger in wrong schema: \"%s\".\"%s\"", schemaname, depname))); ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("trigger in wrong schema: \"%s\".\"%s\"", schemaname, depname)));
} }
} }
break; break;
case OBJECT_TABCONSTRAINT:
address.classId = ConstraintRelationId;
address.objectId = get_relation_constraint_oid(reloid, depname, missing_ok);
address.objectSubId = 0;
break;
case OBJECT_RLSPOLICY: case OBJECT_RLSPOLICY:
address.classId = RlsPolicyRelationId; address.classId = RlsPolicyRelationId;
address.objectId = relation ? get_rlspolicy_oid(reloid, depname, missing_ok) : InvalidOid; address.objectId = relation ? get_rlspolicy_oid(reloid, depname, missing_ok) : InvalidOid;

View File

@ -4,6 +4,7 @@ NOTICE: database "testdb_m" does not exist, skipping
create database testdb_m dbcompatibility 'B'; create database testdb_m dbcompatibility 'B';
\c testdb_m \c testdb_m
create schema testscm; create schema testscm;
create schema testscm2;
create table animals (id int, name char(30)); create table animals (id int, name char(30));
create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp); create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp);
create table testscm.animals_scm (id int, name char(30)); create table testscm.animals_scm (id int, name char(30));
@ -287,6 +288,42 @@ begin
end; end;
/ /
ERROR: schema "testscm_no" does not exist ERROR: schema "testscm_no" does not exist
create trigger animals_trigger1
after insert on animals
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger testscm.animals_trigger1;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- OK
drop trigger animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger2;
ERROR: schema "testscm_no" does not exist
-- OK
drop trigger animals_trigger2;
select tgname from pg_trigger;
tgname
--------
(0 rows)
-- ERROR: trigger "animals_trigger_no" does not exist
drop trigger animals_trigger_no;
ERROR: trigger "animals_trigger_no" does not exist
drop trigger testscm.animals_trigger_no;
ERROR: trigger "animals_trigger_no" does not exist
drop trigger testscm_no.animals_trigger_no;
ERROR: trigger "animals_trigger_no" does not exist
-- 1.1.1.4 trigger with bad schema -- 1.1.1.4 trigger with bad schema
create trigger testscm. create trigger testscm.
after insert on testscm.animals_scm after insert on testscm.animals_scm
@ -638,6 +675,42 @@ begin
end; end;
/ /
ERROR: schema "testscm_no" does not exist ERROR: schema "testscm_no" does not exist
create trigger animals_trigger1
after insert on animals
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger if exists testscm.animals_trigger1;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- OK
drop trigger if exists animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger2;
ERROR: schema "testscm_no" does not exist
-- OK
drop trigger if exists animals_trigger2;
select tgname from pg_trigger;
tgname
--------
(0 rows)
-- NOTICE: trigger "animals_trigger_no" does not exist, skipping
drop trigger if exists animals_trigger_no;
NOTICE: trigger "animals_trigger_no" does not exist, skipping
drop trigger if exists testscm.animals_trigger_no;
NOTICE: trigger "animals_trigger_no" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger_no;
NOTICE: trigger "animals_trigger_no" does not exist, skipping
-- 1.1.3 create trigger execute procedure -- 1.1.3 create trigger execute procedure
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
@ -718,6 +791,20 @@ select tgname from pg_trigger;
animals_trigger1 animals_trigger1
(1 row) (1 row)
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger testscm.animals_trigger1 on animals;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger1 on animals;
ERROR: schema "testscm_no" does not exist
-- ERROR: trigger "animals_trigger_no" for table "animals" does not exist
drop trigger animals_trigger_no on animals;
ERROR: trigger "animals_trigger_no" for table "animals" does not exist
drop trigger testscm.animals_trigger_no on animals;
ERROR: trigger "animals_trigger_no" for table "animals" does not exist
drop trigger testscm_no.animals_trigger_no on animals;
ERROR: trigger "animals_trigger_no" for table "animals" does not exist
-- OK
drop trigger animals_trigger1 on animals; drop trigger animals_trigger1 on animals;
drop trigger animals_trigger1 on animals; drop trigger animals_trigger1 on animals;
ERROR: trigger "animals_trigger1" for table "animals" does not exist ERROR: trigger "animals_trigger1" for table "animals" does not exist
@ -739,64 +826,100 @@ select tgname from pg_trigger;
animals_trigger1 animals_trigger1
(1 row) (1 row)
drop trigger if exists animals_trigger1 on animals; -- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger if exists animals_trigger1 on animals;
NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
select tgname from pg_trigger;
tgname
--------
(0 rows)
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
tgname
------------------
animals_trigger2
(1 row)
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
ERROR: trigger "animals_trigger2" for table "animals_scm" does not exist
select tgname from pg_trigger;
tgname
--------
(0 rows)
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
tgname
------------------
animals_trigger2
(1 row)
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping
select tgname from pg_trigger;
tgname
--------
(0 rows)
drop trigger testscm.animals_trigger1 on animals;
ERROR: trigger "animals_trigger1" for table "animals" does not exist
drop trigger testscm_no.animals_trigger2 on testscm.animals_scm;
ERROR: trigger "animals_trigger2" for table "animals_scm" does not exist
drop trigger if exists testscm.animals_trigger1 on animals; drop trigger if exists testscm.animals_trigger1 on animals;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger1 on animals;
ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "animals.animals_trigger_no" for table "animals" does not exist, skipping
drop trigger if exists animals_trigger_no on animals;
NOTICE: trigger "animals.animals_trigger_no" for table "animals" does not exist, skipping
drop trigger if exists testscm.animals_trigger_no on animals;
NOTICE: trigger "animals.animals_trigger_no" for table "animals" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger_no on animals;
NOTICE: trigger "animals.animals_trigger_no" for table "animals" does not exist, skipping
-- OK
drop trigger if exists animals_trigger1 on animals;
drop trigger if exists animals_trigger1 on animals;
NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
select tgname from pg_trigger;
tgname
--------
(0 rows)
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
tgname
------------------
animals_trigger2
(1 row)
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
drop trigger testscm2.animals_trigger2 on testscm.animals_scm;
ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger2 on testscm.animals_scm;
ERROR: schema "testscm_no" does not exist
-- ERROR: trigger "animals_trigger_no" for table "animals_scm" does not exist
drop trigger animals_trigger_no on testscm.animals_scm;
ERROR: trigger "animals_trigger_no" for table "animals_scm" does not exist
drop trigger testscm.animals_trigger_no on testscm.animals_scm;
ERROR: trigger "animals_trigger_no" for table "animals_scm" does not exist
drop trigger testscm_no.animals_trigger_no on testscm.animals_scm;
ERROR: trigger "animals_trigger_no" for table "animals_scm" does not exist
-- OK
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
ERROR: trigger "animals_trigger2" for table "animals_scm" does not exist
select tgname from pg_trigger;
tgname
--------
(0 rows)
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
tgname
------------------
animals_trigger2
(1 row)
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
drop trigger if exists testscm2.animals_trigger2 on testscm.animals_scm;
ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger2 on testscm.animals_scm; drop trigger if exists testscm_no.animals_trigger2 on testscm.animals_scm;
ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists animals_trigger_no on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists testscm.animals_trigger_no on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists testscm2.animals_trigger_no on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger_no on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
-- OK
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping
select tgname from pg_trigger;
tgname
--------
(0 rows)
-- 1.3 alter trigger -- 1.3 alter trigger
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals

View File

@ -2,15 +2,12 @@
drop database if exists testdb_m; drop database if exists testdb_m;
create database testdb_m dbcompatibility 'B'; create database testdb_m dbcompatibility 'B';
\c testdb_m \c testdb_m
create schema testscm; create schema testscm;
create schema testscm2;
create table animals (id int, name char(30)); create table animals (id int, name char(30));
create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp); create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp);
create table testscm.animals_scm (id int, name char(30)); create table testscm.animals_scm (id int, name char(30));
create table testscm.food_scm (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp); create table testscm.food_scm (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp);
CREATE OR REPLACE FUNCTION food_insert_func() RETURNS TRIGGER AS CREATE OR REPLACE FUNCTION food_insert_func() RETURNS TRIGGER AS
$$ $$
DECLARE DECLARE
@ -19,7 +16,6 @@ INSERT INTO food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy',
RETURN NEW; RETURN NEW;
END END
$$ LANGUAGE PLPGSQL; $$ LANGUAGE PLPGSQL;
-- 1.1 create trigger -- 1.1 create trigger
-- 1.1.1 create trigger + drop trigger -- 1.1.1 create trigger + drop trigger
-- 1.1.1.1 trigger without schema -- 1.1.1.1 trigger without schema
@ -47,7 +43,6 @@ delete from food;
drop trigger animals_trigger1; drop trigger animals_trigger1;
drop trigger animals_trigger1; drop trigger animals_trigger1;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger animals_trigger2 create trigger animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -72,7 +67,6 @@ delete from food;
drop trigger animals_trigger2; drop trigger animals_trigger2;
drop trigger animals_trigger2; drop trigger animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger animals_trigger3 create trigger animals_trigger3
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -123,7 +117,6 @@ delete from food;
drop trigger testscm.animals_trigger2; drop trigger testscm.animals_trigger2;
drop trigger testscm.animals_trigger2; drop trigger testscm.animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger testscm.animals_trigger3 create trigger testscm.animals_trigger3
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -148,7 +141,6 @@ delete from testscm.food_scm;
drop trigger testscm.animals_trigger3; drop trigger testscm.animals_trigger3;
drop trigger testscm.animals_trigger3; drop trigger testscm.animals_trigger3;
select tgname from pg_trigger; select tgname from pg_trigger;
-- 1.1.1.3 trigger with wrong schema -- 1.1.1.3 trigger with wrong schema
create trigger testscm.animals_trigger1 create trigger testscm.animals_trigger1
after insert on animals after insert on animals
@ -164,7 +156,33 @@ begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now()); insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end; end;
/ /
create trigger animals_trigger1
after insert on animals
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger testscm.animals_trigger1;
-- OK
drop trigger animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger2;
-- OK
drop trigger animals_trigger2;
select tgname from pg_trigger;
-- ERROR: trigger "animals_trigger_no" does not exist
drop trigger animals_trigger_no;
drop trigger testscm.animals_trigger_no;
drop trigger testscm_no.animals_trigger_no;
-- 1.1.1.4 trigger with bad schema -- 1.1.1.4 trigger with bad schema
create trigger testscm. create trigger testscm.
after insert on testscm.animals_scm after insert on testscm.animals_scm
@ -222,7 +240,6 @@ begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now()); insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end; end;
/ /
-- 1.1.2 create trigger if not exists + drop trigger if exists -- 1.1.2 create trigger if not exists + drop trigger if exists
-- 1.1.2.1 trigger without schema -- 1.1.2.1 trigger without schema
create trigger if not exists animals_trigger1 create trigger if not exists animals_trigger1
@ -249,7 +266,6 @@ delete from food;
drop trigger if exists animals_trigger1; drop trigger if exists animals_trigger1;
drop trigger if exists animals_trigger1; drop trigger if exists animals_trigger1;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger if not exists animals_trigger2 create trigger if not exists animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -274,7 +290,6 @@ delete from food;
drop trigger if exists animals_trigger2; drop trigger if exists animals_trigger2;
drop trigger if exists animals_trigger2; drop trigger if exists animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger if not exists animals_trigger3 create trigger if not exists animals_trigger3
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -299,7 +314,6 @@ delete from testscm.food_scm;
drop trigger if exists animals_trigger3; drop trigger if exists animals_trigger3;
drop trigger if exists animals_trigger3; drop trigger if exists animals_trigger3;
select tgname from pg_trigger; select tgname from pg_trigger;
-- 1.1.2.2 trigger with right schema -- 1.1.2.2 trigger with right schema
create trigger if not exists testscm.animals_trigger2 create trigger if not exists testscm.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
@ -325,7 +339,6 @@ delete from food;
drop trigger if exists testscm.animals_trigger2; drop trigger if exists testscm.animals_trigger2;
drop trigger if exists testscm.animals_trigger2; drop trigger if exists testscm.animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger if not exists testscm.animals_trigger3 create trigger if not exists testscm.animals_trigger3
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -350,7 +363,6 @@ delete from testscm.food_scm;
drop trigger if exists testscm.animals_trigger3; drop trigger if exists testscm.animals_trigger3;
drop trigger if exists testscm.animals_trigger3; drop trigger if exists testscm.animals_trigger3;
select tgname from pg_trigger; select tgname from pg_trigger;
-- 1.1.2.3 trigger with wrong schema -- 1.1.2.3 trigger with wrong schema
create trigger if not exists testscm.animals_trigger1 create trigger if not exists testscm.animals_trigger1
after insert on animals after insert on animals
@ -366,7 +378,33 @@ begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now()); insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end; end;
/ /
create trigger animals_trigger1
after insert on animals
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger if exists testscm.animals_trigger1;
-- OK
drop trigger if exists animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger2;
-- OK
drop trigger if exists animals_trigger2;
select tgname from pg_trigger;
-- NOTICE: trigger "animals_trigger_no" does not exist, skipping
drop trigger if exists animals_trigger_no;
drop trigger if exists testscm.animals_trigger_no;
drop trigger if exists testscm_no.animals_trigger_no;
-- 1.1.3 create trigger execute procedure -- 1.1.3 create trigger execute procedure
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
@ -375,7 +413,6 @@ execute procedure food_insert_func();
select tgname from pg_trigger; select tgname from pg_trigger;
drop trigger animals_trigger1; drop trigger animals_trigger1;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger testscm.animals_trigger2 create trigger testscm.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -383,7 +420,6 @@ execute procedure food_insert_func();
select tgname from pg_trigger; select tgname from pg_trigger;
drop trigger testscm.animals_trigger2; drop trigger testscm.animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
-- 1.1.4 create constrain trigger execute procedure -- 1.1.4 create constrain trigger execute procedure
create constraint trigger animals_trigger1 create constraint trigger animals_trigger1
after insert on animals after insert on animals
@ -392,7 +428,6 @@ execute procedure food_insert_func();
select tgname from pg_trigger; select tgname from pg_trigger;
drop trigger animals_trigger1; drop trigger animals_trigger1;
select tgname from pg_trigger; select tgname from pg_trigger;
create constraint trigger testscm.animals_trigger2 create constraint trigger testscm.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -400,7 +435,6 @@ execute procedure food_insert_func();
select tgname from pg_trigger; select tgname from pg_trigger;
drop trigger testscm.animals_trigger2; drop trigger testscm.animals_trigger2;
select tgname from pg_trigger; select tgname from pg_trigger;
-- 1.2 drop trigger on table -- 1.2 drop trigger on table
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
@ -410,10 +444,18 @@ begin
end; end;
/ /
select tgname from pg_trigger; select tgname from pg_trigger;
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger testscm.animals_trigger1 on animals;
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger1 on animals;
-- ERROR: trigger "animals_trigger_no" for table "animals" does not exist
drop trigger animals_trigger_no on animals;
drop trigger testscm.animals_trigger_no on animals;
drop trigger testscm_no.animals_trigger_no on animals;
-- OK
drop trigger animals_trigger1 on animals; drop trigger animals_trigger1 on animals;
drop trigger animals_trigger1 on animals; drop trigger animals_trigger1 on animals;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
for each row for each row
@ -422,39 +464,59 @@ begin
end; end;
/ /
select tgname from pg_trigger; select tgname from pg_trigger;
drop trigger if exists animals_trigger1 on animals; -- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
drop trigger if exists animals_trigger1 on animals;
select tgname from pg_trigger;
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
select tgname from pg_trigger;
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
select tgname from pg_trigger;
drop trigger testscm.animals_trigger1 on animals;
drop trigger testscm_no.animals_trigger2 on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger1 on animals; drop trigger if exists testscm.animals_trigger1 on animals;
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger1 on animals;
-- NOTICE: trigger "animals.animals_trigger_no" for table "animals" does not exist, skipping
drop trigger if exists animals_trigger_no on animals;
drop trigger if exists testscm.animals_trigger_no on animals;
drop trigger if exists testscm_no.animals_trigger_no on animals;
-- OK
drop trigger if exists animals_trigger1 on animals;
drop trigger if exists animals_trigger1 on animals;
select tgname from pg_trigger;
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
drop trigger testscm2.animals_trigger2 on testscm.animals_scm;
-- ERROR: schema "testscm_no" does not exist
drop trigger testscm_no.animals_trigger2 on testscm.animals_scm;
-- ERROR: trigger "animals_trigger_no" for table "animals_scm" does not exist
drop trigger animals_trigger_no on testscm.animals_scm;
drop trigger testscm.animals_trigger_no on testscm.animals_scm;
drop trigger testscm_no.animals_trigger_no on testscm.animals_scm;
-- OK
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
drop trigger testscm.animals_trigger2 on testscm.animals_scm;
select tgname from pg_trigger;
create trigger testscm.animals_trigger2
after insert on testscm.animals_scm
for each row
begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
select tgname from pg_trigger;
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
drop trigger if exists testscm2.animals_trigger2 on testscm.animals_scm;
-- ERROR: schema "testscm_no" does not exist
drop trigger if exists testscm_no.animals_trigger2 on testscm.animals_scm; drop trigger if exists testscm_no.animals_trigger2 on testscm.animals_scm;
-- NOTICE: trigger "testscm.animals_scm.animals_trigger_no" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists animals_trigger_no on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger_no on testscm.animals_scm;
drop trigger if exists testscm2.animals_trigger_no on testscm.animals_scm;
drop trigger if exists testscm_no.animals_trigger_no on testscm.animals_scm;
-- OK
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
drop trigger if exists testscm.animals_trigger2 on testscm.animals_scm;
select tgname from pg_trigger;
-- 1.3 alter trigger -- 1.3 alter trigger
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
@ -470,7 +532,6 @@ alter trigger testscm.animals_trigger1 on animals rename to animals_trigger1_2;
alter trigger testscm.animals_trigger1_1 on animals rename to animals_trigger1_2; alter trigger testscm.animals_trigger1_1 on animals rename to animals_trigger1_2;
alter trigger testscm_no.animals_trigger1_1 on animals rename to animals_trigger1_2; alter trigger testscm_no.animals_trigger1_1 on animals rename to animals_trigger1_2;
drop trigger animals_trigger1_1 on animals; drop trigger animals_trigger1_1 on animals;
create trigger testscm.animals_trigger2 create trigger testscm.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -486,10 +547,8 @@ select tgname from pg_trigger;
alter trigger testscm.animals_trigger2_1 on testscm.animals_scm rename to animals_trigger2_2; alter trigger testscm.animals_trigger2_1 on testscm.animals_scm rename to animals_trigger2_2;
alter trigger testscm_no.animals_trigger2_2 on testscm.animals_scm rename to animals_trigger2_3; alter trigger testscm_no.animals_trigger2_2 on testscm.animals_scm rename to animals_trigger2_3;
drop trigger testscm.animals_trigger2_2 on testscm.animals_scm; drop trigger testscm.animals_trigger2_2 on testscm.animals_scm;
-- 1.6 set search_path to schema -- 1.6 set search_path to schema
set search_path to testscm; set search_path to testscm;
create trigger animals_trigger2 create trigger animals_trigger2
after insert on animals_scm after insert on animals_scm
for each row for each row
@ -499,7 +558,6 @@ end;
/ /
alter trigger animals_trigger2 on animals_scm rename to animals_trigger2_1; alter trigger animals_trigger2 on animals_scm rename to animals_trigger2_1;
drop trigger animals_trigger2_1 on animals_scm; drop trigger animals_trigger2_1 on animals_scm;
create trigger testscm.animals_trigger2 create trigger testscm.animals_trigger2
after insert on animals_scm after insert on animals_scm
for each row for each row
@ -509,26 +567,19 @@ end;
/ /
alter trigger testscm.animals_trigger2 on animals_scm rename to animals_trigger2_1; alter trigger testscm.animals_trigger2 on animals_scm rename to animals_trigger2_1;
drop trigger testscm.animals_trigger2_1 on animals_scm; drop trigger testscm.animals_trigger2_1 on animals_scm;
set search_path to public; set search_path to public;
-- 1.5 cleanup -- 1.5 cleanup
\c regression \c regression
drop database testdb_m; drop database testdb_m;
-- 2. test non B_FORMAT trigger -- 2. test non B_FORMAT trigger
drop database if exists testdb; drop database if exists testdb;
create database testdb; create database testdb;
\c testdb \c testdb
create schema testscm; create schema testscm;
create table animals (id int, name char(30)); create table animals (id int, name char(30));
create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp); create table food (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp);
create table testscm.animals_scm (id int, name char(30)); create table testscm.animals_scm (id int, name char(30));
create table testscm.food_scm (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp); create table testscm.food_scm (id int, foodtype varchar(32), remark varchar(32), time_flag timestamp);
CREATE OR REPLACE FUNCTION food_insert_func() RETURNS TRIGGER AS CREATE OR REPLACE FUNCTION food_insert_func() RETURNS TRIGGER AS
$$ $$
DECLARE DECLARE
@ -537,7 +588,6 @@ INSERT INTO food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy',
RETURN NEW; RETURN NEW;
END END
$$ LANGUAGE PLPGSQL; $$ LANGUAGE PLPGSQL;
-- 2.1 create trigger + alter trigger + drop trigger -- 2.1 create trigger + alter trigger + drop trigger
create trigger animals_trigger1 create trigger animals_trigger1
after insert on animals after insert on animals
@ -549,7 +599,6 @@ select tgname from pg_trigger;
drop trigger animals_trigger1_1; drop trigger animals_trigger1_1;
drop trigger animals_trigger1_1 on animals; drop trigger animals_trigger1_1 on animals;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger animals_trigger2 create trigger animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
@ -560,21 +609,18 @@ select tgname from pg_trigger;
drop trigger animals_trigger2_1; drop trigger animals_trigger2_1;
drop trigger animals_trigger2_1 on testscm.animals_scm; drop trigger animals_trigger2_1 on testscm.animals_scm;
select tgname from pg_trigger; select tgname from pg_trigger;
create trigger testscm.animals_trigger2 create trigger testscm.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
execute procedure food_insert_func(); execute procedure food_insert_func();
alter trigger testscm.animals_trigger2 on testscm.animals_scm rename to animals_trigger2_1; alter trigger testscm.animals_trigger2 on testscm.animals_scm rename to animals_trigger2_1;
drop trigger testscm.animals_trigger2; drop trigger testscm.animals_trigger2;
create trigger testscm_no.animals_trigger2 create trigger testscm_no.animals_trigger2
after insert on testscm.animals_scm after insert on testscm.animals_scm
for each row for each row
execute procedure food_insert_func(); execute procedure food_insert_func();
alter trigger testscm_no.animals_trigger2 on testscm.animals_scm rename to animals_trigger2_1; alter trigger testscm_no.animals_trigger2 on testscm.animals_scm rename to animals_trigger2_1;
drop trigger testscm_no.animals_trigger2; drop trigger testscm_no.animals_trigger2;
-- 2.2 cleanup -- 2.2 cleanup
\c regression \c regression
drop database testdb; drop database testdb;