bugfix - drop if exists trigger with wrong schema

This commit is contained in:
mentoswang
2023-05-19 13:58:03 +08:00
parent 54ad2fd462
commit 136a143dcf
3 changed files with 35 additions and 24 deletions

View File

@ -1312,9 +1312,16 @@ static ObjectAddress get_object_address_relobject(ObjectType objtype, List* objn
relation = heap_open(reloid, AccessShareLock);
if (objtype == OBJECT_TRIGGER && u_sess->attr.attr_sql.sql_compatibility == B_FORMAT && schemaname != NULL) {
Oid relNamespaceId = RelationGetNamespace(relation);
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)));
if (relNamespaceId != get_namespace_oid(schemaname, missing_ok)) {
if(!missing_ok) {
ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("trigger in wrong schema: \"%s\".\"%s\"", schemaname, depname)));
} else {
address.objectId = InvalidOid;
heap_close(relation, AccessShareLock);
relation = NULL;
return address;
}
}
}
}
@ -1339,9 +1346,13 @@ static ObjectAddress get_object_address_relobject(ObjectType objtype, List* objn
address.objectSubId = 0;
if (OidIsValid(address.objectId) && schemaname != NULL) {
Oid relNamespaceId = RelationGetNamespace(relation);
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)));
if (relNamespaceId != get_namespace_oid(schemaname, missing_ok)) {
if(!missing_ok) {
ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("trigger in wrong schema: \"%s\".\"%s\"", schemaname, depname)));
} else {
address.objectId = InvalidOid;
}
}
}
break;

View File

@ -689,14 +689,14 @@ begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- NOTICE: trigger "animals_trigger1" does not exist, skipping
drop trigger if exists testscm.animals_trigger1;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
NOTICE: trigger "animals_trigger1" does not exist, skipping
-- OK
drop trigger if exists animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "animals_trigger1" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger2;
ERROR: schema "testscm_no" does not exist
NOTICE: trigger "animals_trigger2" does not exist, skipping
-- OK
drop trigger if exists animals_trigger2;
select tgname from pg_trigger;
@ -826,12 +826,12 @@ select tgname from pg_trigger;
animals_trigger1
(1 row)
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
drop trigger if exists testscm.animals_trigger1 on animals;
ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- ERROR: schema "testscm_no" does not exist
NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
-- NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger1 on animals;
ERROR: schema "testscm_no" does not exist
NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
-- 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
@ -896,12 +896,12 @@ select tgname from pg_trigger;
animals_trigger2
(1 row)
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
-- NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping
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
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
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_trigger2" for table "testscm.animals_scm" does not exist, skipping
-- 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

View File

@ -391,11 +391,11 @@ begin
insert into food(id, foodtype, remark, time_flag) values (1,'bamboo', 'healthy', now());
end;
/
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- NOTICE: trigger "animals_trigger1" does not exist, skipping
drop trigger if exists testscm.animals_trigger1;
-- OK
drop trigger if exists animals_trigger1;
-- ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "animals_trigger1" does not exist, skipping
drop trigger if exists testscm_no.animals_trigger2;
-- OK
drop trigger if exists animals_trigger2;
@ -463,9 +463,9 @@ begin
end;
/
select tgname from pg_trigger;
-- ERROR: trigger in wrong schema: "testscm"."animals_trigger1"
-- NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
drop trigger if exists testscm.animals_trigger1 on animals;
-- ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "animals.animals_trigger1" for table "animals" does not exist, skipping
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;
@ -503,9 +503,9 @@ begin
end;
/
select tgname from pg_trigger;
-- ERROR: trigger in wrong schema: "testscm2"."animals_trigger2"
-- NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping
drop trigger if exists testscm2.animals_trigger2 on testscm.animals_scm;
-- ERROR: schema "testscm_no" does not exist
-- NOTICE: trigger "testscm.animals_scm.animals_trigger2" for table "testscm.animals_scm" does not exist, skipping
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;