bugfix - drop if exists trigger with wrong schema
This commit is contained in:
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user