pgsql-v9.2-ddl-refactoring-part-3.v1.alter-set-schema.patch
application/octet-stream
Filename: pgsql-v9.2-ddl-refactoring-part-3.v1.alter-set-schema.patch
Type: application/octet-stream
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v9
| File | + | − |
|---|---|---|
| src/backend/catalog/objectaddress.c | 14 | 0 |
| src/backend/commands/alter.c | 126 | 219 |
| src/backend/commands/collationcmds.c | 0 | 73 |
| src/backend/commands/conversioncmds.c | 0 | 50 |
| src/backend/commands/functioncmds.c | 0 | 82 |
| src/backend/commands/opclasscmds.c | 0 | 104 |
| src/backend/commands/operatorcmds.c | 0 | 53 |
| src/backend/commands/tsearchcmds.c | 0 | 188 |
| src/backend/nodes/copyfuncs.c | 0 | 1 |
| src/backend/nodes/equalfuncs.c | 0 | 1 |
| src/backend/parser/gram.y | 2 | 2 |
| src/include/catalog/objectaddress.h | 1 | 0 |
| src/include/commands/alter.h | 0 | 4 |
| src/include/commands/collationcmds.h | 0 | 2 |
| src/include/commands/conversioncmds.h | 0 | 2 |
| src/include/commands/defrem.h | 0 | 17 |
| src/include/nodes/parsenodes.h | 0 | 1 |
| src/test/regress/expected/alter_rename.out | 9 | 9 |
| src/test/regress/sql/alter_rename.sql | 3 | 6 |
src/backend/catalog/objectaddress.c | 14 ++
src/backend/commands/alter.c | 345 ++++++++++------------------
src/backend/commands/collationcmds.c | 73 ------
src/backend/commands/conversioncmds.c | 50 ----
src/backend/commands/functioncmds.c | 82 -------
src/backend/commands/opclasscmds.c | 104 ---------
src/backend/commands/operatorcmds.c | 53 -----
src/backend/commands/tsearchcmds.c | 188 ---------------
src/backend/nodes/copyfuncs.c | 1 -
src/backend/nodes/equalfuncs.c | 1 -
src/backend/parser/gram.y | 4 +-
src/include/catalog/objectaddress.h | 1 +
src/include/commands/alter.h | 4 -
src/include/commands/collationcmds.h | 2 -
src/include/commands/conversioncmds.h | 2 -
src/include/commands/defrem.h | 17 --
src/include/nodes/parsenodes.h | 1 -
src/test/regress/expected/alter_rename.out | 18 +-
src/test/regress/sql/alter_rename.sql | 9 +-
19 files changed, 155 insertions(+), 814 deletions(-)
diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
index bcf5259..9162c26 100644
--- a/src/backend/catalog/objectaddress.c
+++ b/src/backend/catalog/objectaddress.c
@@ -1485,6 +1485,20 @@ get_object_tuple(ObjectAddress address)
}
/*
+ * get_object_namespace_attnum
+ *
+ * It returns attribute number of namespace of the given object type,
+ * or InvalidAttrNumber if it is not an object under schema.
+ */
+AttrNumber
+get_object_namespace_attnum(const ObjectAddress *address)
+{
+ ObjectPropertyType *property
+ = get_object_property_data(address->classId);
+ return property->attnum_namespace;
+}
+
+/*
* get_object_namespace
*
* Find the schema containing the specified object. For non-schema objects,
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index c321224..2d60a99 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -181,6 +181,84 @@ ExecRenameStmt(RenameStmt *stmt)
}
/*
+ * AlterObjectSchemaInternal
+ *
+ * Generic function to change the namespace of a given object, for simple
+ * cases (won't work for tables, nor other cases where we need to do more
+ * than change the namespace column of a single catalog entry).
+ *
+ * this routine assumes the caller checks CREATE permission on `new_schema'
+ * via LookupCreationNamespace().
+ */
+static Oid
+AlterObjectSchemaInternal(ObjectAddress address,
+ Oid new_schema, Relation relation)
+{
+ Relation catalog;
+ Oid old_schema;
+ HeapTuple oldtup;
+ HeapTuple newtup;
+ AttrNumber Anum_namespace;
+ Datum datum;
+ bool isnull;
+ Datum *values;
+ bool *nulls;
+ bool *replaces;
+
+ catalog = heap_open(address.classId, RowExclusiveLock);
+
+ /* Fetch a tuple to be updated from the catalog */
+ Anum_namespace = get_object_namespace_attnum(&address);
+ oldtup = get_object_tuple(address);
+ datum = heap_getattr(oldtup, Anum_namespace,
+ RelationGetDescr(catalog), &isnull);
+ Assert(!isnull);
+ old_schema = DatumGetObjectId(datum);
+
+ /* Check basic namespace related issues */
+ CheckSetNamespace(old_schema, new_schema,
+ address.classId, address.objectId);
+
+ /* Permission checks */
+ check_object_ownership(GetUserId(), address, relation);
+
+ /* Check for duplicate names */
+ if (object_exists_namespace(address, new_schema, NULL))
+ ereport(ERROR,
+ (errcode(ERRCODE_DUPLICATE_OBJECT),
+ errmsg("%s already exists in schema \"%s\"",
+ getObjectDescriptionOids(address.classId,
+ address.objectId),
+ get_namespace_name(new_schema))));
+
+ /* Build modified tuple */
+ values = palloc0(RelationGetNumberOfAttributes(catalog) * sizeof(Datum));
+ nulls = palloc0(RelationGetNumberOfAttributes(catalog) * sizeof(bool));
+ replaces = palloc0(RelationGetNumberOfAttributes(catalog) * sizeof(bool));
+ values[Anum_namespace - 1] = ObjectIdGetDatum(new_schema);
+ replaces[Anum_namespace - 1] = true;
+ newtup = heap_modify_tuple(oldtup, RelationGetDescr(catalog),
+ values, nulls, replaces);
+
+ /* Perform actual update */
+ simple_heap_update(catalog, &oldtup->t_self, newtup);
+ CatalogUpdateIndexes(catalog, newtup);
+
+ /* Release memory */
+ pfree(values);
+ pfree(nulls);
+ pfree(replaces);
+
+ /* update dependencies to point to the new schema */
+ changeDependencyFor(address.classId, address.objectId,
+ NamespaceRelationId, old_schema, new_schema);
+
+ heap_close(catalog, RowExclusiveLock);
+
+ return old_schema;
+}
+
+/*
* Executes an ALTER OBJECT / SET SCHEMA statement. Based on the object
* type, the function appropriate to that type is executed.
*/
@@ -189,73 +267,70 @@ ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt)
{
switch (stmt->objectType)
{
- case OBJECT_AGGREGATE:
- AlterFunctionNamespace(stmt->object, stmt->objarg, true,
- stmt->newschema);
- break;
-
- case OBJECT_COLLATION:
- AlterCollationNamespace(stmt->object, stmt->newschema);
- break;
-
- case OBJECT_CONVERSION:
- AlterConversionNamespace(stmt->object, stmt->newschema);
- break;
-
case OBJECT_EXTENSION:
+ /*
+ * ALTER EXTENSION tries to set schema on underlying objects,
+ * so it is unavailable to consolidate with common routine.
+ */
AlterExtensionNamespace(stmt->object, stmt->newschema);
break;
- case OBJECT_FUNCTION:
- AlterFunctionNamespace(stmt->object, stmt->objarg, false,
- stmt->newschema);
- break;
-
- case OBJECT_OPERATOR:
- AlterOperatorNamespace(stmt->object, stmt->objarg, stmt->newschema);
- break;
-
- case OBJECT_OPCLASS:
- AlterOpClassNamespace(stmt->object, stmt->addname, stmt->newschema);
- break;
-
- case OBJECT_OPFAMILY:
- AlterOpFamilyNamespace(stmt->object, stmt->addname, stmt->newschema);
- break;
-
case OBJECT_SEQUENCE:
case OBJECT_TABLE:
case OBJECT_VIEW:
case OBJECT_FOREIGN_TABLE:
+ /*
+ * ALTER "TABLE" is allowed to use for VIEW, SEQUENCE or FOREIGN
+ * TABLE, so it is unavailable to consolidate with common routine.
+ */
CheckRelationOwnership(stmt->relation, true);
AlterTableNamespace(stmt->relation, stmt->newschema,
stmt->objectType, AccessExclusiveLock);
break;
- case OBJECT_TSPARSER:
- AlterTSParserNamespace(stmt->object, stmt->newschema);
+ case OBJECT_TYPE:
+ case OBJECT_DOMAIN:
+ /*
+ * ALTER TYPE also alters namespace of the composite table's
+ * definition on pg_class, so it is unavailable to consolidate
+ * with common routine.
+ */
+ AlterTypeNamespace(stmt->object, stmt->newschema);
break;
+ case OBJECT_AGGREGATE:
+ case OBJECT_COLLATION:
+ case OBJECT_CONVERSION:
+ case OBJECT_FUNCTION:
+ case OBJECT_OPERATOR:
+ case OBJECT_OPCLASS:
+ case OBJECT_OPFAMILY:
+ case OBJECT_TSPARSER:
case OBJECT_TSDICTIONARY:
- AlterTSDictionaryNamespace(stmt->object, stmt->newschema);
- break;
-
case OBJECT_TSTEMPLATE:
- AlterTSTemplateNamespace(stmt->object, stmt->newschema);
- break;
-
case OBJECT_TSCONFIGURATION:
- AlterTSConfigurationNamespace(stmt->object, stmt->newschema);
- break;
+ {
+ ObjectAddress address;
+ Relation relation = NULL;
+ Oid new_schema;
- case OBJECT_TYPE:
- case OBJECT_DOMAIN:
- AlterTypeNamespace(stmt->object, stmt->newschema);
- break;
+ address = get_object_address(stmt->objectType,
+ stmt->object, stmt->objarg,
+ &relation,
+ AccessExclusiveLock, false);
+ new_schema = LookupCreationNamespace(stmt->newschema);
+
+ AlterObjectSchemaInternal(address, new_schema, relation);
+
+ if (relation)
+ heap_close(relation, NoLock);
+ }
+ break;
default:
elog(ERROR, "unrecognized AlterObjectSchemaStmt type: %d",
(int) stmt->objectType);
+ break;
}
}
@@ -277,6 +352,7 @@ Oid
AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid)
{
Oid oldNspOid = InvalidOid;
+ Relation relation = NULL;
ObjectAddress dep;
dep.classId = classId;
@@ -285,204 +361,35 @@ AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid)
switch (getObjectClass(&dep))
{
- case OCLASS_CLASS:
- {
- Relation rel;
- Relation classRel;
-
- rel = relation_open(objid, AccessExclusiveLock);
- oldNspOid = RelationGetNamespace(rel);
-
- classRel = heap_open(RelationRelationId, RowExclusiveLock);
-
- AlterRelationNamespaceInternal(classRel,
- objid,
- oldNspOid,
- nspOid,
- true);
-
- heap_close(classRel, RowExclusiveLock);
-
- relation_close(rel, NoLock);
- break;
- }
-
- case OCLASS_PROC:
- oldNspOid = AlterFunctionNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_TYPE:
oldNspOid = AlterTypeNamespace_oid(objid, nspOid);
break;
+ case OCLASS_CLASS:
+ relation = relation_open(objid, AccessExclusiveLock);
+ case OCLASS_PROC:
case OCLASS_COLLATION:
- oldNspOid = AlterCollationNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_CONVERSION:
- oldNspOid = AlterConversionNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_OPERATOR:
- oldNspOid = AlterOperatorNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_OPCLASS:
- oldNspOid = AlterOpClassNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_OPFAMILY:
- oldNspOid = AlterOpFamilyNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_TSPARSER:
- oldNspOid = AlterTSParserNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_TSDICT:
- oldNspOid = AlterTSDictionaryNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_TSTEMPLATE:
- oldNspOid = AlterTSTemplateNamespace_oid(objid, nspOid);
- break;
-
case OCLASS_TSCONFIG:
- oldNspOid = AlterTSConfigurationNamespace_oid(objid, nspOid);
+ oldNspOid = AlterObjectSchemaInternal(dep, nspOid, relation);
break;
default:
break;
}
+ if (relation)
+ heap_close(relation, NoLock);
return oldNspOid;
}
/*
- * Generic function to change the namespace of a given object, for simple
- * cases (won't work for tables, nor other cases where we need to do more
- * than change the namespace column of a single catalog entry).
- *
- * The AlterFooNamespace() calls just above will call a function whose job
- * is to lookup the arguments for the generic function here.
- *
- * rel: catalog relation containing object (RowExclusiveLock'd by caller)
- * oidCacheId: syscache that indexes this catalog by OID
- * nameCacheId: syscache that indexes this catalog by name and namespace
- * (pass -1 if there is none)
- * objid: OID of object to change the namespace of
- * nspOid: OID of new namespace
- * Anum_name: column number of catalog's name column
- * Anum_namespace: column number of catalog's namespace column
- * Anum_owner: column number of catalog's owner column, or -1 if none
- * acl_kind: ACL type for object, or -1 if none assigned
- *
- * If the object does not have an owner or permissions, pass -1 for
- * Anum_owner and acl_kind. In this case the calling user must be superuser.
- *
- * Returns the OID of the object's previous namespace.
- */
-Oid
-AlterObjectNamespace(Relation rel, int oidCacheId, int nameCacheId,
- Oid objid, Oid nspOid,
- int Anum_name, int Anum_namespace, int Anum_owner,
- AclObjectKind acl_kind)
-{
- Oid classId = RelationGetRelid(rel);
- Oid oldNspOid;
- Datum name,
- namespace;
- bool isnull;
- HeapTuple tup,
- newtup;
- Datum *values;
- bool *nulls;
- bool *replaces;
-
- tup = SearchSysCacheCopy1(oidCacheId, ObjectIdGetDatum(objid));
- if (!HeapTupleIsValid(tup)) /* should not happen */
- elog(ERROR, "cache lookup failed for object %u of catalog \"%s\"",
- objid, RelationGetRelationName(rel));
-
- name = heap_getattr(tup, Anum_name, RelationGetDescr(rel), &isnull);
- Assert(!isnull);
- namespace = heap_getattr(tup, Anum_namespace, RelationGetDescr(rel), &isnull);
- Assert(!isnull);
- oldNspOid = DatumGetObjectId(namespace);
-
- /* Check basic namespace related issues */
- CheckSetNamespace(oldNspOid, nspOid, classId, objid);
-
- /* Permission checks ... superusers can always do it */
- if (!superuser())
- {
- Datum owner;
- Oid ownerId;
- AclResult aclresult;
-
- /* Fail if object does not have an explicit owner */
- if (Anum_owner <= 0)
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- (errmsg("must be superuser to set schema of %s",
- getObjectDescriptionOids(classId, objid)))));
-
- /* Otherwise, must be owner of the existing object */
- owner = heap_getattr(tup, Anum_owner, RelationGetDescr(rel), &isnull);
- Assert(!isnull);
- ownerId = DatumGetObjectId(owner);
-
- if (!has_privs_of_role(GetUserId(), ownerId))
- aclcheck_error(ACLCHECK_NOT_OWNER, acl_kind,
- NameStr(*(DatumGetName(name))));
-
- /* User must have CREATE privilege on new namespace */
- aclresult = pg_namespace_aclcheck(nspOid, GetUserId(), ACL_CREATE);
- if (aclresult != ACLCHECK_OK)
- aclcheck_error(aclresult, ACL_KIND_NAMESPACE,
- get_namespace_name(nspOid));
- }
-
- /*
- * Check for duplicate name (more friendly than unique-index failure).
- * Since this is just a friendliness check, we can just skip it in cases
- * where there isn't a suitable syscache available.
- */
- if (nameCacheId >= 0 &&
- SearchSysCacheExists2(nameCacheId, name, ObjectIdGetDatum(nspOid)))
- ereport(ERROR,
- (errcode(ERRCODE_DUPLICATE_OBJECT),
- errmsg("%s already exists in schema \"%s\"",
- getObjectDescriptionOids(classId, objid),
- get_namespace_name(nspOid))));
-
- /* Build modified tuple */
- values = palloc0(RelationGetNumberOfAttributes(rel) * sizeof(Datum));
- nulls = palloc0(RelationGetNumberOfAttributes(rel) * sizeof(bool));
- replaces = palloc0(RelationGetNumberOfAttributes(rel) * sizeof(bool));
- values[Anum_namespace - 1] = ObjectIdGetDatum(nspOid);
- replaces[Anum_namespace - 1] = true;
- newtup = heap_modify_tuple(tup, RelationGetDescr(rel),
- values, nulls, replaces);
-
- /* Perform actual update */
- simple_heap_update(rel, &tup->t_self, newtup);
- CatalogUpdateIndexes(rel, newtup);
-
- /* Release memory */
- pfree(values);
- pfree(nulls);
- pfree(replaces);
-
- /* update dependencies to point to the new schema */
- changeDependencyFor(classId, objid,
- NamespaceRelationId, oldNspOid, nspOid);
-
- return oldNspOid;
-}
-
-
-/*
* Executes an ALTER OBJECT / OWNER TO statement. Based on the object
* type, the function appropriate to that type is executed.
*/
diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c
index 20aa204..09020d1 100644
--- a/src/backend/commands/collationcmds.c
+++ b/src/backend/commands/collationcmds.c
@@ -307,76 +307,3 @@ AlterCollationOwner_internal(Relation rel, Oid collationOid, Oid newOwnerId)
heap_freetuple(tup);
}
-
-/*
- * Execute ALTER COLLATION SET SCHEMA
- */
-void
-AlterCollationNamespace(List *name, const char *newschema)
-{
- Oid collOid,
- nspOid;
-
- collOid = get_collation_oid(name, false);
-
- nspOid = LookupCreationNamespace(newschema);
-
- AlterCollationNamespace_oid(collOid, nspOid);
-}
-
-/*
- * Change collation schema, by oid
- */
-Oid
-AlterCollationNamespace_oid(Oid collOid, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
- char *collation_name;
-
- rel = heap_open(CollationRelationId, RowExclusiveLock);
-
- /*
- * We have to check for name collision ourselves, because
- * AlterObjectNamespace doesn't know how to deal with the encoding
- * considerations.
- */
- collation_name = get_collation_name(collOid);
- if (!collation_name)
- elog(ERROR, "cache lookup failed for collation %u", collOid);
-
- /* make sure the name doesn't already exist in new schema */
- if (SearchSysCacheExists3(COLLNAMEENCNSP,
- CStringGetDatum(collation_name),
- Int32GetDatum(GetDatabaseEncoding()),
- ObjectIdGetDatum(newNspOid)))
- ereport(ERROR,
- (errcode(ERRCODE_DUPLICATE_OBJECT),
- errmsg("collation \"%s\" for encoding \"%s\" already exists in schema \"%s\"",
- collation_name,
- GetDatabaseEncodingName(),
- get_namespace_name(newNspOid))));
-
- /* mustn't match an any-encoding entry, either */
- if (SearchSysCacheExists3(COLLNAMEENCNSP,
- CStringGetDatum(collation_name),
- Int32GetDatum(-1),
- ObjectIdGetDatum(newNspOid)))
- ereport(ERROR,
- (errcode(ERRCODE_DUPLICATE_OBJECT),
- errmsg("collation \"%s\" already exists in schema \"%s\"",
- collation_name,
- get_namespace_name(newNspOid))));
-
- /* OK, do the work */
- oldNspOid = AlterObjectNamespace(rel, COLLOID, -1,
- collOid, newNspOid,
- Anum_pg_collation_collname,
- Anum_pg_collation_collnamespace,
- Anum_pg_collation_collowner,
- ACL_KIND_COLLATION);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
diff --git a/src/backend/commands/conversioncmds.c b/src/backend/commands/conversioncmds.c
index 7d6063d..950f870 100644
--- a/src/backend/commands/conversioncmds.c
+++ b/src/backend/commands/conversioncmds.c
@@ -265,53 +265,3 @@ AlterConversionOwner_internal(Relation rel, Oid conversionOid, Oid newOwnerId)
heap_freetuple(tup);
}
-
-/*
- * Execute ALTER CONVERSION SET SCHEMA
- */
-void
-AlterConversionNamespace(List *name, const char *newschema)
-{
- Oid convOid,
- nspOid;
- Relation rel;
-
- rel = heap_open(ConversionRelationId, RowExclusiveLock);
-
- convOid = get_conversion_oid(name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, CONVOID, CONNAMENSP,
- convOid, nspOid,
- Anum_pg_conversion_conname,
- Anum_pg_conversion_connamespace,
- Anum_pg_conversion_conowner,
- ACL_KIND_CONVERSION);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-/*
- * Change conversion schema, by oid
- */
-Oid
-AlterConversionNamespace_oid(Oid convOid, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(ConversionRelationId, RowExclusiveLock);
-
- oldNspOid = AlterObjectNamespace(rel, CONVOID, CONNAMENSP,
- convOid, newNspOid,
- Anum_pg_conversion_conname,
- Anum_pg_conversion_connamespace,
- Anum_pg_conversion_conowner,
- ACL_KIND_CONVERSION);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 09a975b..5102d87 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -1760,88 +1760,6 @@ DropCastById(Oid castOid)
}
/*
- * Execute ALTER FUNCTION/AGGREGATE SET SCHEMA
- *
- * These commands are identical except for the lookup procedure, so share code.
- */
-void
-AlterFunctionNamespace(List *name, List *argtypes, bool isagg,
- const char *newschema)
-{
- Oid procOid;
- Oid nspOid;
-
- /* get function OID */
- if (isagg)
- procOid = LookupAggNameTypeNames(name, argtypes, false);
- else
- procOid = LookupFuncNameTypeNames(name, argtypes, false);
-
- /* get schema OID and check its permissions */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterFunctionNamespace_oid(procOid, nspOid);
-}
-
-Oid
-AlterFunctionNamespace_oid(Oid procOid, Oid nspOid)
-{
- Oid oldNspOid;
- HeapTuple tup;
- Relation procRel;
- Form_pg_proc proc;
-
- procRel = heap_open(ProcedureRelationId, RowExclusiveLock);
-
- tup = SearchSysCacheCopy1(PROCOID, ObjectIdGetDatum(procOid));
- if (!HeapTupleIsValid(tup))
- elog(ERROR, "cache lookup failed for function %u", procOid);
- proc = (Form_pg_proc) GETSTRUCT(tup);
-
- /* check permissions on function */
- if (!pg_proc_ownercheck(procOid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_PROC,
- NameStr(proc->proname));
-
- oldNspOid = proc->pronamespace;
-
- /* common checks on switching namespaces */
- CheckSetNamespace(oldNspOid, nspOid, ProcedureRelationId, procOid);
-
- /* check for duplicate name (more friendly than unique-index failure) */
- if (SearchSysCacheExists3(PROCNAMEARGSNSP,
- CStringGetDatum(NameStr(proc->proname)),
- PointerGetDatum(&proc->proargtypes),
- ObjectIdGetDatum(nspOid)))
- ereport(ERROR,
- (errcode(ERRCODE_DUPLICATE_FUNCTION),
- errmsg("function \"%s\" already exists in schema \"%s\"",
- NameStr(proc->proname),
- get_namespace_name(nspOid))));
-
- /* OK, modify the pg_proc row */
-
- /* tup is a copy, so we can scribble directly on it */
- proc->pronamespace = nspOid;
-
- simple_heap_update(procRel, &tup->t_self, tup);
- CatalogUpdateIndexes(procRel, tup);
-
- /* Update dependency on schema */
- if (changeDependencyFor(ProcedureRelationId, procOid,
- NamespaceRelationId, oldNspOid, nspOid) != 1)
- elog(ERROR, "failed to change schema dependency for function \"%s\"",
- NameStr(proc->proname));
-
- heap_freetuple(tup);
-
- heap_close(procRel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
-
-/*
* ExecuteDoStmt
* Execute inline procedural-language code
*/
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c
index 0ef3584..7598561 100644
--- a/src/backend/commands/opclasscmds.c
+++ b/src/backend/commands/opclasscmds.c
@@ -1896,58 +1896,6 @@ AlterOpClassOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
}
/*
- * ALTER OPERATOR CLASS any_name USING access_method SET SCHEMA name
- */
-void
-AlterOpClassNamespace(List *name, char *access_method, const char *newschema)
-{
- Oid amOid;
- Relation rel;
- Oid opclassOid;
- Oid nspOid;
-
- amOid = get_am_oid(access_method, false);
-
- rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
-
- /* Look up the opclass */
- opclassOid = get_opclass_oid(amOid, name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, CLAOID, -1,
- opclassOid, nspOid,
- Anum_pg_opclass_opcname,
- Anum_pg_opclass_opcnamespace,
- Anum_pg_opclass_opcowner,
- ACL_KIND_OPCLASS);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterOpClassNamespace_oid(Oid opclassOid, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(OperatorClassRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, CLAOID, -1,
- opclassOid, newNspOid,
- Anum_pg_opclass_opcname,
- Anum_pg_opclass_opcnamespace,
- Anum_pg_opclass_opcowner,
- ACL_KIND_OPCLASS);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
-/*
* Change opfamily owner by name
*/
void
@@ -2103,55 +2051,3 @@ get_am_oid(const char *amname, bool missing_ok)
errmsg("access method \"%s\" does not exist", amname)));
return oid;
}
-
-/*
- * ALTER OPERATOR FAMILY any_name USING access_method SET SCHEMA name
- */
-void
-AlterOpFamilyNamespace(List *name, char *access_method, const char *newschema)
-{
- Oid amOid;
- Relation rel;
- Oid opfamilyOid;
- Oid nspOid;
-
- amOid = get_am_oid(access_method, false);
-
- rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
-
- /* Look up the opfamily */
- opfamilyOid = get_opfamily_oid(amOid, name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, OPFAMILYOID, -1,
- opfamilyOid, nspOid,
- Anum_pg_opfamily_opfname,
- Anum_pg_opfamily_opfnamespace,
- Anum_pg_opfamily_opfowner,
- ACL_KIND_OPFAMILY);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterOpFamilyNamespace_oid(Oid opfamilyOid, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(OperatorFamilyRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, OPFAMILYOID, -1,
- opfamilyOid, newNspOid,
- Anum_pg_opfamily_opfname,
- Anum_pg_opfamily_opfnamespace,
- Anum_pg_opfamily_opfowner,
- ACL_KIND_OPFAMILY);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
diff --git a/src/backend/commands/operatorcmds.c b/src/backend/commands/operatorcmds.c
index 1e6c5ce..1037c45 100644
--- a/src/backend/commands/operatorcmds.c
+++ b/src/backend/commands/operatorcmds.c
@@ -401,56 +401,3 @@ AlterOperatorOwner_internal(Relation rel, Oid operOid, Oid newOwnerId)
heap_freetuple(tup);
}
-
-/*
- * Execute ALTER OPERATOR SET SCHEMA
- */
-void
-AlterOperatorNamespace(List *names, List *argtypes, const char *newschema)
-{
- List *operatorName = names;
- TypeName *typeName1 = (TypeName *) linitial(argtypes);
- TypeName *typeName2 = (TypeName *) lsecond(argtypes);
- Oid operOid,
- nspOid;
- Relation rel;
-
- rel = heap_open(OperatorRelationId, RowExclusiveLock);
-
- Assert(list_length(argtypes) == 2);
- operOid = LookupOperNameTypeNames(NULL, operatorName,
- typeName1, typeName2,
- false, -1);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, OPEROID, -1,
- operOid, nspOid,
- Anum_pg_operator_oprname,
- Anum_pg_operator_oprnamespace,
- Anum_pg_operator_oprowner,
- ACL_KIND_OPER);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterOperatorNamespace_oid(Oid operOid, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(OperatorRelationId, RowExclusiveLock);
-
- oldNspOid = AlterObjectNamespace(rel, OPEROID, -1,
- operOid, newNspOid,
- Anum_pg_operator_oprname,
- Anum_pg_operator_oprnamespace,
- Anum_pg_operator_oprowner,
- ACL_KIND_OPER);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c
index 5f206d8..471d6d1 100644
--- a/src/backend/commands/tsearchcmds.c
+++ b/src/backend/commands/tsearchcmds.c
@@ -344,52 +344,6 @@ RenameTSParser(List *oldname, const char *newname)
heap_freetuple(tup);
}
-/*
- * ALTER TEXT SEARCH PARSER any_name SET SCHEMA name
- */
-void
-AlterTSParserNamespace(List *name, const char *newschema)
-{
- Oid prsId,
- nspOid;
- Relation rel;
-
- rel = heap_open(TSParserRelationId, RowExclusiveLock);
-
- prsId = get_ts_parser_oid(name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, TSPARSEROID, TSPARSERNAMENSP,
- prsId, nspOid,
- Anum_pg_ts_parser_prsname,
- Anum_pg_ts_parser_prsnamespace,
- -1, -1);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterTSParserNamespace_oid(Oid prsId, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(TSParserRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, TSPARSEROID, TSPARSERNAMENSP,
- prsId, newNspOid,
- Anum_pg_ts_parser_prsname,
- Anum_pg_ts_parser_prsnamespace,
- -1, -1);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
/* ---------------------- TS Dictionary commands -----------------------*/
/*
@@ -624,54 +578,6 @@ RenameTSDictionary(List *oldname, const char *newname)
}
/*
- * ALTER TEXT SEARCH DICTIONARY any_name SET SCHEMA name
- */
-void
-AlterTSDictionaryNamespace(List *name, const char *newschema)
-{
- Oid dictId,
- nspOid;
- Relation rel;
-
- rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
-
- dictId = get_ts_dict_oid(name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, TSDICTOID, TSDICTNAMENSP,
- dictId, nspOid,
- Anum_pg_ts_dict_dictname,
- Anum_pg_ts_dict_dictnamespace,
- Anum_pg_ts_dict_dictowner,
- ACL_KIND_TSDICTIONARY);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterTSDictionaryNamespace_oid(Oid dictId, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(TSDictionaryRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, TSDICTOID, TSDICTNAMENSP,
- dictId, newNspOid,
- Anum_pg_ts_dict_dictname,
- Anum_pg_ts_dict_dictnamespace,
- Anum_pg_ts_dict_dictowner,
- ACL_KIND_TSDICTIONARY);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
-/*
* Guts of TS dictionary deletion.
*/
void
@@ -1088,52 +994,6 @@ RenameTSTemplate(List *oldname, const char *newname)
}
/*
- * ALTER TEXT SEARCH TEMPLATE any_name SET SCHEMA name
- */
-void
-AlterTSTemplateNamespace(List *name, const char *newschema)
-{
- Oid tmplId,
- nspOid;
- Relation rel;
-
- rel = heap_open(TSTemplateRelationId, RowExclusiveLock);
-
- tmplId = get_ts_template_oid(name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, TSTEMPLATEOID, TSTEMPLATENAMENSP,
- tmplId, nspOid,
- Anum_pg_ts_template_tmplname,
- Anum_pg_ts_template_tmplnamespace,
- -1, -1);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterTSTemplateNamespace_oid(Oid tmplId, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(TSTemplateRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, TSTEMPLATEOID, TSTEMPLATENAMENSP,
- tmplId, newNspOid,
- Anum_pg_ts_template_tmplname,
- Anum_pg_ts_template_tmplnamespace,
- -1, -1);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
-/*
* Guts of TS template deletion.
*/
void
@@ -1479,54 +1339,6 @@ RenameTSConfiguration(List *oldname, const char *newname)
}
/*
- * ALTER TEXT SEARCH CONFIGURATION any_name SET SCHEMA name
- */
-void
-AlterTSConfigurationNamespace(List *name, const char *newschema)
-{
- Oid cfgId,
- nspOid;
- Relation rel;
-
- rel = heap_open(TSConfigRelationId, RowExclusiveLock);
-
- cfgId = get_ts_config_oid(name, false);
-
- /* get schema OID */
- nspOid = LookupCreationNamespace(newschema);
-
- AlterObjectNamespace(rel, TSCONFIGOID, TSCONFIGNAMENSP,
- cfgId, nspOid,
- Anum_pg_ts_config_cfgname,
- Anum_pg_ts_config_cfgnamespace,
- Anum_pg_ts_config_cfgowner,
- ACL_KIND_TSCONFIGURATION);
-
- heap_close(rel, RowExclusiveLock);
-}
-
-Oid
-AlterTSConfigurationNamespace_oid(Oid cfgId, Oid newNspOid)
-{
- Oid oldNspOid;
- Relation rel;
-
- rel = heap_open(TSConfigRelationId, RowExclusiveLock);
-
- oldNspOid =
- AlterObjectNamespace(rel, TSCONFIGOID, TSCONFIGNAMENSP,
- cfgId, newNspOid,
- Anum_pg_ts_config_cfgname,
- Anum_pg_ts_config_cfgnamespace,
- Anum_pg_ts_config_cfgowner,
- ACL_KIND_TSCONFIGURATION);
-
- heap_close(rel, RowExclusiveLock);
-
- return oldNspOid;
-}
-
-/*
* Guts of TS configuration deletion.
*/
void
diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
index b8f047a..6fa5ec1 100644
--- a/src/backend/nodes/copyfuncs.c
+++ b/src/backend/nodes/copyfuncs.c
@@ -2914,7 +2914,6 @@ _copyAlterObjectSchemaStmt(AlterObjectSchemaStmt *from)
COPY_NODE_FIELD(relation);
COPY_NODE_FIELD(object);
COPY_NODE_FIELD(objarg);
- COPY_STRING_FIELD(addname);
COPY_STRING_FIELD(newschema);
return newnode;
diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c
index d1af48a..9ae95b0 100644
--- a/src/backend/nodes/equalfuncs.c
+++ b/src/backend/nodes/equalfuncs.c
@@ -1319,7 +1319,6 @@ _equalAlterObjectSchemaStmt(AlterObjectSchemaStmt *a, AlterObjectSchemaStmt *b)
COMPARE_NODE_FIELD(relation);
COMPARE_NODE_FIELD(object);
COMPARE_NODE_FIELD(objarg);
- COMPARE_STRING_FIELD(addname);
COMPARE_STRING_FIELD(newschema);
return true;
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 7ea38e4..7940121 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -6765,7 +6765,7 @@ AlterObjectSchemaStmt:
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_OPCLASS;
n->object = $4;
- n->addname = $6;
+ n->objarg = list_make1(makeString($6));
n->newschema = $9;
$$ = (Node *)n;
}
@@ -6774,7 +6774,7 @@ AlterObjectSchemaStmt:
AlterObjectSchemaStmt *n = makeNode(AlterObjectSchemaStmt);
n->objectType = OBJECT_OPFAMILY;
n->object = $4;
- n->addname = $6;
+ n->objarg = list_make1(makeString($6));
n->newschema = $9;
$$ = (Node *)n;
}
diff --git a/src/include/catalog/objectaddress.h b/src/include/catalog/objectaddress.h
index ff7b957..a5d3325 100644
--- a/src/include/catalog/objectaddress.h
+++ b/src/include/catalog/objectaddress.h
@@ -42,6 +42,7 @@ extern bool object_exists_namespace(ObjectAddress address,
extern HeapTuple get_object_tuple(ObjectAddress address);
+extern AttrNumber get_object_namespace_attnum(const ObjectAddress *address);
extern Oid get_object_namespace(const ObjectAddress *address);
#endif /* PARSE_OBJECT_H */
diff --git a/src/include/commands/alter.h b/src/include/commands/alter.h
index 6cf9de1..0186a48 100644
--- a/src/include/commands/alter.h
+++ b/src/include/commands/alter.h
@@ -20,10 +20,6 @@
extern void ExecRenameStmt(RenameStmt *stmt);
extern void ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt);
extern Oid AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid);
-extern Oid AlterObjectNamespace(Relation rel, int oidCacheId, int nameCacheId,
- Oid objid, Oid nspOid,
- int Anum_name, int Anum_namespace, int Anum_owner,
- AclObjectKind acl_kind);
extern void ExecAlterOwnerStmt(AlterOwnerStmt *stmt);
#endif /* ALTER_H */
diff --git a/src/include/commands/collationcmds.h b/src/include/commands/collationcmds.h
index ce4727c..d161d74 100644
--- a/src/include/commands/collationcmds.h
+++ b/src/include/commands/collationcmds.h
@@ -21,7 +21,5 @@ extern void DefineCollation(List *names, List *parameters);
extern void RenameCollation(List *name, const char *newname);
extern void AlterCollationOwner(List *name, Oid newOwnerId);
extern void AlterCollationOwner_oid(Oid collationOid, Oid newOwnerId);
-extern void AlterCollationNamespace(List *name, const char *newschema);
-extern Oid AlterCollationNamespace_oid(Oid collOid, Oid newNspOid);
#endif /* COLLATIONCMDS_H */
diff --git a/src/include/commands/conversioncmds.h b/src/include/commands/conversioncmds.h
index c0e7cd9..6a8a02f 100644
--- a/src/include/commands/conversioncmds.h
+++ b/src/include/commands/conversioncmds.h
@@ -21,7 +21,5 @@ extern void CreateConversionCommand(CreateConversionStmt *parsetree);
extern void RenameConversion(List *name, const char *newname);
extern void AlterConversionOwner(List *name, Oid newOwnerId);
extern void AlterConversionOwner_oid(Oid conversionOid, Oid newOwnerId);
-extern void AlterConversionNamespace(List *name, const char *newschema);
-extern Oid AlterConversionNamespace_oid(Oid convOid, Oid newNspOid);
#endif /* CONVERSIONCMDS_H */
diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h
index f0dcf76..b4c0c91 100644
--- a/src/include/commands/defrem.h
+++ b/src/include/commands/defrem.h
@@ -70,9 +70,6 @@ extern void AlterFunctionOwner_oid(Oid procOid, Oid newOwnerId);
extern void AlterFunction(AlterFunctionStmt *stmt);
extern void CreateCast(CreateCastStmt *stmt);
extern void DropCastById(Oid castOid);
-extern void AlterFunctionNamespace(List *name, List *argtypes, bool isagg,
- const char *newschema);
-extern Oid AlterFunctionNamespace_oid(Oid procOid, Oid nspOid);
extern void ExecuteDoStmt(DoStmt *stmt);
extern Oid get_cast_oid(Oid sourcetypeid, Oid targettypeid, bool missing_ok);
@@ -82,8 +79,6 @@ extern void RemoveOperatorById(Oid operOid);
extern void AlterOperatorOwner(List *name, TypeName *typeName1,
TypeName *typename2, Oid newOwnerId);
extern void AlterOperatorOwner_oid(Oid operOid, Oid newOwnerId);
-extern void AlterOperatorNamespace(List *names, List *argtypes, const char *newschema);
-extern Oid AlterOperatorNamespace_oid(Oid operOid, Oid newNspOid);
/* commands/aggregatecmds.c */
extern void DefineAggregate(List *name, List *args, bool oldstyle,
@@ -103,12 +98,8 @@ extern void RenameOpClass(List *name, const char *access_method, const char *new
extern void RenameOpFamily(List *name, const char *access_method, const char *newname);
extern void AlterOpClassOwner(List *name, const char *access_method, Oid newOwnerId);
extern void AlterOpClassOwner_oid(Oid opclassOid, Oid newOwnerId);
-extern void AlterOpClassNamespace(List *name, char *access_method, const char *newschema);
-extern Oid AlterOpClassNamespace_oid(Oid opclassOid, Oid newNspOid);
extern void AlterOpFamilyOwner(List *name, const char *access_method, Oid newOwnerId);
extern void AlterOpFamilyOwner_oid(Oid opfamilyOid, Oid newOwnerId);
-extern void AlterOpFamilyNamespace(List *name, char *access_method, const char *newschema);
-extern Oid AlterOpFamilyNamespace_oid(Oid opfamilyOid, Oid newNspOid);
extern Oid get_am_oid(const char *amname, bool missing_ok);
extern Oid get_opclass_oid(Oid amID, List *opclassname, bool missing_ok);
extern Oid get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok);
@@ -116,8 +107,6 @@ extern Oid get_opfamily_oid(Oid amID, List *opfamilyname, bool missing_ok);
/* commands/tsearchcmds.c */
extern void DefineTSParser(List *names, List *parameters);
extern void RenameTSParser(List *oldname, const char *newname);
-extern void AlterTSParserNamespace(List *name, const char *newschema);
-extern Oid AlterTSParserNamespace_oid(Oid prsId, Oid newNspOid);
extern void RemoveTSParserById(Oid prsId);
extern void DefineTSDictionary(List *names, List *parameters);
@@ -125,13 +114,9 @@ extern void RenameTSDictionary(List *oldname, const char *newname);
extern void RemoveTSDictionaryById(Oid dictId);
extern void AlterTSDictionary(AlterTSDictionaryStmt *stmt);
extern void AlterTSDictionaryOwner(List *name, Oid newOwnerId);
-extern void AlterTSDictionaryNamespace(List *name, const char *newschema);
-extern Oid AlterTSDictionaryNamespace_oid(Oid dictId, Oid newNspOid);
extern void DefineTSTemplate(List *names, List *parameters);
extern void RenameTSTemplate(List *oldname, const char *newname);
-extern void AlterTSTemplateNamespace(List *name, const char *newschema);
-extern Oid AlterTSTemplateNamespace_oid(Oid tmplId, Oid newNspOid);
extern void RemoveTSTemplateById(Oid tmplId);
extern void DefineTSConfiguration(List *names, List *parameters);
@@ -139,8 +124,6 @@ extern void RenameTSConfiguration(List *oldname, const char *newname);
extern void RemoveTSConfigurationById(Oid cfgId);
extern void AlterTSConfiguration(AlterTSConfigurationStmt *stmt);
extern void AlterTSConfigurationOwner(List *name, Oid newOwnerId);
-extern void AlterTSConfigurationNamespace(List *name, const char *newschema);
-extern Oid AlterTSConfigurationNamespace_oid(Oid cfgId, Oid newNspOid);
extern text *serialize_deflist(List *deflist);
extern List *deserialize_deflist(Datum txt);
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 6449eca..77d4167 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -2125,7 +2125,6 @@ typedef struct AlterObjectSchemaStmt
RangeVar *relation; /* in case it's a table */
List *object; /* in case it's some other object */
List *objarg; /* argument types, if applicable */
- char *addname; /* additional name if needed */
char *newschema; /* the new schema */
} AlterObjectSchemaStmt;
diff --git a/src/test/regress/expected/alter_rename.out b/src/test/regress/expected/alter_rename.out
index 6688d50..7248b49 100644
--- a/src/test/regress/expected/alter_rename.out
+++ b/src/test/regress/expected/alter_rename.out
@@ -128,7 +128,7 @@ ERROR: function testfunc_b(integer) already exists in schema "testschema_1"
ALTER FUNCTION testfunc_b(int) SET SCHEMA testschema_2; -- OK
ALTER FUNCTION testfunc_a(int) RENAME TO testfunc_b; -- OK
ALTER FUNCTION testfunc_b(int) SET SCHEMA testschema_2; -- fail
-ERROR: function "testfunc_b" already exists in schema "testschema_2"
+ERROR: function testfunc_b(integer) already exists in schema "testschema_2"
CREATE AGGREGATE testagg_a(
sfunc1 = int4pl, basetype = int4, stype1 = int4,
initcond1 = '0'
@@ -142,7 +142,7 @@ ERROR: function testagg_b(integer) already exists in schema "testschema_1"
ALTER AGGREGATE testagg_b(int) SET SCHEMA testschema_2; -- OK
ALTER AGGREGATE testagg_a(int) RENAME TO testagg_b; -- OK
ALTER AGGREGATE testagg_b(int) SET SCHEMA testschema_2; -- fail
-ERROR: function "testagg_b" already exists in schema "testschema_2"
+ERROR: function testagg_b(integer) already exists in schema "testschema_2"
--
-- TYPE
--
@@ -172,16 +172,16 @@ CREATE OPERATOR @#@
ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- OK
CREATE OPERATOR @#@
(leftarg = int8, rightarg = int8, procedure = int8xor);
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- fail
+ERROR: operator @#@(bigint,bigint) already exists in schema "testschema_2"
CREATE OPERATOR FAMILY testopfamily_a USING btree;
CREATE OPERATOR FAMILY testopfamily_b USING btree;
ALTER OPERATOR FAMILY testopfamily_a USING btree RENAME TO testopfamily_b; -- fail
ERROR: operator family "testopfamily_b" for access method "btree" already exists in schema "testschema_1"
ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- OK
ALTER OPERATOR FAMILY testopfamily_a USING btree RENAME TO testopfamily_b; -- OK
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- fail
+ERROR: operator family testopfamily_b for access method btree already exists in schema "testschema_2"
CREATE OPERATOR CLASS testopclass_a
FOR TYPE box USING btree FAMILY testopfamily_b AS OPERATOR 1 =;
CREATE OPERATOR CLASS testopclass_b
@@ -190,8 +190,8 @@ ALTER OPERATOR CLASS testopclass_a USING btree RENAME TO testopclass_b; -- fail
ERROR: operator class "testopclass_b" for access method "btree" already exists in schema "testschema_1"
ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- OK
ALTER OPERATOR CLASS testopclass_a USING btree RENAME TO testopclass_b; -- OK
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- fail
+ERROR: operator class testopclass_b for access method btree already exists in schema "testschema_2"
--
-- TEXT SEARCH
--
@@ -229,7 +229,7 @@ ERROR: collation "testcollation_b" for encoding "UTF8" already exists in schema
ALTER COLLATION testcollation_b SET SCHEMA testschema_2; -- OK
ALTER COLLATION testcollation_a RENAME TO testcollation_b; -- OK
ALTER COLLATION testcollation_b SET SCHEMA testschema_2; -- fail
-ERROR: collation "testcollation_b" for encoding "UTF8" already exists in schema "testschema_2"
+ERROR: collation testcollation_b already exists in schema "testschema_2"
--
-- CONVERSION
--
diff --git a/src/test/regress/sql/alter_rename.sql b/src/test/regress/sql/alter_rename.sql
index 9b2bdf1..4a33b12 100644
--- a/src/test/regress/sql/alter_rename.sql
+++ b/src/test/regress/sql/alter_rename.sql
@@ -162,16 +162,14 @@ CREATE OPERATOR @#@
ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- OK
CREATE OPERATOR @#@
(leftarg = int8, rightarg = int8, procedure = int8xor);
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR @#@(int8,int8) SET SCHEMA testschema_2; -- fail
CREATE OPERATOR FAMILY testopfamily_a USING btree;
CREATE OPERATOR FAMILY testopfamily_b USING btree;
ALTER OPERATOR FAMILY testopfamily_a USING btree RENAME TO testopfamily_b; -- fail
ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- OK
ALTER OPERATOR FAMILY testopfamily_a USING btree RENAME TO testopfamily_b; -- OK
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR FAMILY testopfamily_b USING btree SET SCHEMA testschema_2; -- fail
CREATE OPERATOR CLASS testopclass_a
@@ -181,8 +179,7 @@ CREATE OPERATOR CLASS testopclass_b
ALTER OPERATOR CLASS testopclass_a USING btree RENAME TO testopclass_b; -- fail
ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- OK
ALTER OPERATOR CLASS testopclass_a USING btree RENAME TO testopclass_b; -- OK
--- XXX - comment out due to error message with oid determinded at runtime
--- ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- fail
+ALTER OPERATOR CLASS testopclass_b USING btree SET SCHEMA testschema_2; -- fail
--
-- TEXT SEARCH