summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier2023-07-10 04:08:10 +0000
committerMichael Paquier2023-07-10 04:08:10 +0000
commit9b286858e3ab1647304c5fbb2b1529de6bead8f7 (patch)
tree49e054aed70a033106195ce595723e842be52a0d
parentbd5ddbe8666a11e34ba77e4c1788c4832dcd9a50 (diff)
Add more sanity checks with callers of changeDependencyFor()
changeDependencyFor() returns the number of pg_depend entries changed, or 0 if there is a problem. The callers of this routine expect only one dependency to change, but they did not check for the result returned. The following code paths gain checks: - Namespace for extensions. - Namespace for various object types (see AlterObjectNamespace). - Planner support function for a function. Some existing error messages related to all that are reworded to be more consistent with the project style, and the new error messages added follow the same style. This change has exposed one bug fixed a bit earlier with bd5ddbe. Reviewed-by: Heikki Linnakangas, Akshat Jaimini Discussion: https://postgr.es/m/ZJzD/[email protected]
-rw-r--r--src/backend/commands/alter.c8
-rw-r--r--src/backend/commands/cluster.c4
-rw-r--r--src/backend/commands/extension.c8
-rw-r--r--src/backend/commands/functioncmds.c10
-rw-r--r--src/backend/commands/tablecmds.c2
-rw-r--r--src/backend/commands/typecmds.c2
6 files changed, 21 insertions, 13 deletions
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index e95dc31bde3..d64929df558 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -847,9 +847,11 @@ AlterObjectNamespace_internal(Relation rel, Oid objid, Oid nspOid)
pfree(nulls);
pfree(replaces);
- /* update dependencies to point to the new schema */
- changeDependencyFor(classId, objid,
- NamespaceRelationId, oldNspOid, nspOid);
+ /* update dependency to point to the new schema */
+ if (changeDependencyFor(classId, objid,
+ NamespaceRelationId, oldNspOid, nspOid) != 1)
+ elog(ERROR, "could not change schema dependency for object %u",
+ objid);
InvokeObjectPostAlterHook(classId, objid, 0);
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 92c465c05b4..a3bef6ac34f 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -1271,7 +1271,7 @@ swap_relation_files(Oid r1, Oid r2, bool target_is_pg_class,
AccessMethodRelationId,
relam1,
relam2) != 1)
- elog(ERROR, "failed to change access method dependency for relation \"%s.%s\"",
+ elog(ERROR, "could not change access method dependency for relation \"%s.%s\"",
get_namespace_name(get_rel_namespace(r1)),
get_rel_name(r1));
if (changeDependencyFor(RelationRelationId,
@@ -1279,7 +1279,7 @@ swap_relation_files(Oid r1, Oid r2, bool target_is_pg_class,
AccessMethodRelationId,
relam2,
relam1) != 1)
- elog(ERROR, "failed to change access method dependency for relation \"%s.%s\"",
+ elog(ERROR, "could not change access method dependency for relation \"%s.%s\"",
get_namespace_name(get_rel_namespace(r2)),
get_rel_name(r2));
}
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 39db7584f33..9a2ee1c6008 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -2944,9 +2944,11 @@ AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *o
table_close(extRel, RowExclusiveLock);
- /* update dependencies to point to the new schema */
- changeDependencyFor(ExtensionRelationId, extensionOid,
- NamespaceRelationId, oldNspOid, nspOid);
+ /* update dependency to point to the new schema */
+ if (changeDependencyFor(ExtensionRelationId, extensionOid,
+ NamespaceRelationId, oldNspOid, nspOid) != 1)
+ elog(ERROR, "could not change schema dependency for extension %s",
+ NameStr(extForm->extname));
InvokeObjectPostAlterHook(ExtensionRelationId, extensionOid, 0);
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 49c7864c7cf..7ba6a86ebe6 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -1450,9 +1450,13 @@ AlterFunction(ParseState *pstate, AlterFunctionStmt *stmt)
/* Add or replace dependency on support function */
if (OidIsValid(procForm->prosupport))
- changeDependencyFor(ProcedureRelationId, funcOid,
- ProcedureRelationId, procForm->prosupport,
- newsupport);
+ {
+ if (changeDependencyFor(ProcedureRelationId, funcOid,
+ ProcedureRelationId, procForm->prosupport,
+ newsupport) != 1)
+ elog(ERROR, "could not change support dependency for function %s",
+ get_func_name(funcOid));
+ }
else
{
ObjectAddress referenced;
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 5316f583081..53ad3650935 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -16608,7 +16608,7 @@ AlterRelationNamespaceInternal(Relation classRel, Oid relOid,
NamespaceRelationId,
oldNspOid,
newNspOid) != 1)
- elog(ERROR, "failed to change schema dependency for relation \"%s\"",
+ elog(ERROR, "could not change schema dependency for relation \"%s\"",
NameStr(classForm->relname));
}
if (!already_done)
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 216482095d2..5e97606793d 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -4059,7 +4059,7 @@ AlterTypeNamespaceInternal(Oid typeOid, Oid nspOid,
!isImplicitArray)
if (changeDependencyFor(TypeRelationId, typeOid,
NamespaceRelationId, oldNspOid, nspOid) != 1)
- elog(ERROR, "failed to change schema dependency for type %s",
+ elog(ERROR, "could not change schema dependency for type \"%s\"",
format_type_be(typeOid));
InvokeObjectPostAlterHook(TypeRelationId, typeOid, 0);