65 #include "utils/fmgroids.h" 83 case EventTriggerRelationId:
84 msgfmt =
gettext_noop(
"event trigger \"%s\" already exists");
86 case ForeignDataWrapperRelationId:
87 msgfmt =
gettext_noop(
"foreign-data wrapper \"%s\" already exists");
89 case ForeignServerRelationId:
92 case LanguageRelationId:
95 case PublicationRelationId:
96 msgfmt =
gettext_noop(
"publication \"%s\" already exists");
98 case SubscriptionRelationId:
99 msgfmt =
gettext_noop(
"subscription \"%s\" already exists");
102 elog(
ERROR,
"unsupported object class %u", classId);
120 case ConversionRelationId:
122 msgfmt =
gettext_noop(
"conversion \"%s\" already exists in schema \"%s\"");
124 case StatisticExtRelationId:
126 msgfmt =
gettext_noop(
"statistics object \"%s\" already exists in schema \"%s\"");
128 case TSParserRelationId:
130 msgfmt =
gettext_noop(
"text search parser \"%s\" already exists in schema \"%s\"");
132 case TSDictionaryRelationId:
134 msgfmt =
gettext_noop(
"text search dictionary \"%s\" already exists in schema \"%s\"");
136 case TSTemplateRelationId:
138 msgfmt =
gettext_noop(
"text search template \"%s\" already exists in schema \"%s\"");
140 case TSConfigRelationId:
142 msgfmt =
gettext_noop(
"text search configuration \"%s\" already exists in schema \"%s\"");
145 elog(
ERROR,
"unsupported object class %u", classId);
189 elog(
ERROR,
"cache lookup failed for object %u of catalog \"%s\"",
198 if (Anum_namespace > 0)
214 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
215 errmsg(
"must be superuser to rename %s",
244 if (classId == ProcedureRelationId)
249 &proc->proargtypes, proc->pronamespace);
251 else if (classId == CollationRelationId)
257 else if (classId == OperatorClassRelationId)
264 else if (classId == OperatorFamilyRelationId)
271 else if (classId == SubscriptionRelationId)
278 #ifdef ENFORCE_REGRESSION_TEST_NAME_RESTRICTIONS 279 if (strncmp(new_name,
"regress_", 8) != 0)
280 elog(
WARNING,
"subscriptions created by regression test cases should have names starting with \"regress_\"");
283 else if (nameCacheId >= 0)
306 replaces[Anum_name - 1] =
true;
308 values, nulls, replaces);
417 elog(
ERROR,
"unrecognized rename stmt type: %d",
463 *refAddress = refAddr;
505 oldSchemaAddr ? &oldNspOid : NULL);
514 oldSchemaAddr ? &oldNspOid : NULL);
521 oldSchemaAddr ? &oldNspOid : NULL);
562 elog(
ERROR,
"unrecognized AlterObjectSchemaStmt type: %d",
710 elog(
ERROR,
"cache lookup failed for object %u of catalog \"%s\"",
715 namespace =
heap_getattr(tup, Anum_namespace, RelationGetDescr(rel),
724 if (oldNspOid == nspOid)
743 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
744 errmsg(
"must be superuser to set schema of %s",
768 if (classId == ProcedureRelationId)
773 &proc->proargtypes, nspOid);
775 else if (classId == CollationRelationId)
781 else if (classId == OperatorClassRelationId)
786 opc->opcmethod, nspOid);
788 else if (classId == OperatorFamilyRelationId)
793 opf->opfmethod, nspOid);
795 else if (nameCacheId >= 0 &&
807 replaces[Anum_namespace - 1] =
true;
809 values, nulls, replaces);
821 NamespaceRelationId, oldNspOid, nspOid);
905 if (classId == LargeObjectRelationId)
906 classId = LargeObjectMetadataRelationId;
918 elog(
ERROR,
"unrecognized AlterOwnerStmt type: %d",
950 elog(
ERROR,
"cache lookup failed for object %u of catalog \"%s\"",
966 if (old_ownerId != new_ownerId)
992 snprintf(namebuf,
sizeof(namebuf),
"%u", objectId);
1017 nulls =
palloc0(nattrs *
sizeof(
bool));
1018 replaces =
palloc0(nattrs *
sizeof(
bool));
1020 replaces[Anum_owner - 1] =
true;
1035 old_ownerId, new_ownerId);
1037 replaces[Anum_acl - 1] =
true;
1042 values, nulls, replaces);
1048 if (classId == LargeObjectMetadataRelationId)
1049 classId = LargeObjectRelationId;
ObjectAddress RenameSchema(const char *oldname, const char *newname)
void table_close(Relation relation, LOCKMODE lockmode)
ObjectAddress RenameType(RenameStmt *stmt)
static void report_namespace_conflict(Oid classId, const char *name, Oid nspOid)
AttrNumber get_object_attnum_oid(Oid class_id)
AttrNumber get_object_attnum_owner(Oid class_id)
#define RelationGetDescr(relation)
#define castNode(_type_, nodeptr)
void namestrcpy(Name name, const char *str)
#define RelationGetNumberOfAttributes(relation)
#define PointerGetDatum(X)
Oid LookupCreationNamespace(const char *nspname)
#define DatumGetObjectId(X)
bool has_privs_of_role(Oid member, Oid role)
int get_object_catcache_name(Oid class_id)
ObjectAddress RenameRelation(RenameStmt *stmt)
ObjectAddress AlterTypeNamespace(List *names, const char *newschema, ObjectType objecttype, Oid *oldschema)
static Oid AlterObjectNamespace_internal(Relation rel, Oid objid, Oid nspOid)
int errcode(int sqlerrcode)
void recordDependencyOn(const ObjectAddress *depender, const ObjectAddress *referenced, DependencyType behavior)
AttrNumber get_object_attnum_namespace(Oid class_id)
void heap_freetuple(HeapTuple htup)
ObjectClass getObjectClass(const ObjectAddress *object)
#define OidIsValid(objectId)
AclResult pg_namespace_aclcheck(Oid nsp_oid, Oid roleid, AclMode mode)
void IsThereOpClassInNamespace(const char *opcname, Oid opcmethod, Oid opcnamespace)
long deleteDependencyRecordsForSpecific(Oid classId, Oid objectId, char deptype, Oid refclassId, Oid refobjectId)
ObjectAddress AlterTableNamespace(AlterObjectSchemaStmt *stmt, Oid *oldschema)
ObjectAddress RenameDatabase(const char *oldname, const char *newname)
ObjectAddress AlterEventTriggerOwner(const char *name, Oid newOwnerId)
void changeDependencyOnOwner(Oid classId, Oid objectId, Oid newOwnerId)
void aclcheck_error(AclResult aclerr, ObjectType objtype, const char *objectname)
#define SearchSysCacheExists1(cacheId, key1)
ObjectAddress AlterTypeOwner(List *names, Oid newOwnerId, ObjectType objecttype)
void pfree(void *pointer)
#define ObjectIdGetDatum(X)
ObjectAddress rename_policy(RenameStmt *stmt)
Relation relation_open(Oid relationId, LOCKMODE lockmode)
int get_object_catcache_oid(Oid class_id)
void AlterTableNamespaceInternal(Relation rel, Oid oldNspOid, Oid nspOid, ObjectAddresses *objsMoved)
ObjectAddress AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId)
char * getObjectDescriptionOids(Oid classid, Oid objid)
char * get_namespace_name(Oid nspid)
AttrNumber get_object_attnum_acl(Oid class_id)
void AlterObjectOwner_internal(Relation rel, Oid objectId, Oid new_ownerId)
ObjectAddress get_object_address_rv(ObjectType objtype, RangeVar *rel, List *object, Relation *relp, LOCKMODE lockmode, bool missing_ok)
#define CStringGetDatum(X)
#define RelationGetRelationName(relation)
void IsThereCollationInNamespace(const char *collname, Oid nspOid)
void check_is_member_of_role(Oid member, Oid role)
ObjectAddress AlterSubscriptionOwner(const char *name, Oid newOwnerId)
ObjectAddress ExecRenameStmt(RenameStmt *stmt)
ObjectAddress renametrig(RenameStmt *stmt)
#define InvokeObjectPostAlterHook(classId, objectId, subId)
ObjectAddress renameatt(RenameStmt *stmt)
ObjectAddress RenameConstraint(RenameStmt *stmt)
void CheckSetNamespace(Oid oldNspOid, Oid nspOid)
Oid AlterTypeNamespace_oid(Oid typeOid, Oid nspOid, ObjectAddresses *objsMoved)
void IsThereFunctionInNamespace(const char *proname, int pronargs, oidvector *proargtypes, Oid nspOid)
#define heap_getattr(tup, attnum, tupleDesc, isnull)
HeapTuple SearchSysCache1(int cacheId, Datum key1)
FormData_pg_opfamily * Form_pg_opfamily
AttrNumber get_object_attnum_name(Oid class_id)
void * palloc0(Size size)
HeapTuple get_catalog_object_by_oid(Relation catalog, AttrNumber oidcol, Oid objectId)
void ReleaseSysCache(HeapTuple tuple)
Oid get_rolespec_oid(const RoleSpec *role, bool missing_ok)
ObjectAddress AlterPublicationOwner(const char *name, Oid newOwnerId)
ObjectAddress ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt, ObjectAddress *refAddress)
FormData_pg_proc * Form_pg_proc
ObjectAddress RenameRole(const char *oldname, const char *newname)
#define ereport(elevel,...)
ObjectAddress ExecAlterObjectSchemaStmt(AlterObjectSchemaStmt *stmt, ObjectAddress *oldSchemaAddr)
bool list_member_oid(const List *list, Oid datum)
#define HeapTupleIsValid(tuple)
ObjectAddress AlterSchemaOwner(const char *name, Oid newOwnerId)
void relation_close(Relation relation, LOCKMODE lockmode)
#define Assert(condition)
ObjectAddress AlterForeignServerOwner(const char *name, Oid newOwnerId)
static void report_name_conflict(Oid classId, const char *name)
ObjectAddress get_object_address(ObjectType objtype, Node *object, Relation *relp, LOCKMODE lockmode, bool missing_ok)
static void AlterObjectRename_internal(Relation rel, Oid objectId, const char *new_name)
void CatalogTupleUpdate(Relation heapRel, ItemPointer otid, HeapTuple tup)
ObjectAddress RenameRewriteRule(RangeVar *relation, const char *oldName, const char *newName)
ObjectAddress ExecAlterOwnerStmt(AlterOwnerStmt *stmt)
ObjectType get_object_type(Oid class_id, Oid object_id)
ObjectAddress AlterDatabaseOwner(const char *dbname, Oid newOwnerId)
#define SearchSysCacheExists2(cacheId, key1, key2)
#define InvalidAttrNumber
FormData_pg_collation * Form_pg_collation
#define ObjectAddressSet(addr, class_id, object_id)
static Datum values[MAXATTR]
ObjectAddress RenameTableSpace(const char *oldname, const char *newname)
void check_object_ownership(Oid roleid, ObjectType objtype, ObjectAddress address, Node *object, Relation relation)
#define SearchSysCacheCopy1(cacheId, key1)
#define AccessExclusiveLock
const ObjectAddress InvalidObjectAddress
int errmsg(const char *fmt,...)
long changeDependencyFor(Oid classId, Oid objectId, Oid refClassId, Oid oldRefObjectId, Oid newRefObjectId)
Oid AlterObjectNamespace_oid(Oid classId, Oid objid, Oid nspOid, ObjectAddresses *objsMoved)
Relation table_open(Oid relationId, LOCKMODE lockmode)
HeapTuple heap_modify_tuple(HeapTuple tuple, TupleDesc tupleDesc, Datum *replValues, bool *replIsnull, bool *doReplace)
FormData_pg_opclass * Form_pg_opclass
#define ERRCODE_DUPLICATE_OBJECT
List * getAutoExtensionsOfObject(Oid classId, Oid objectId)
ObjectAddress AlterExtensionNamespace(const char *extensionName, const char *newschema, Oid *oldschema)
Acl * aclnewowner(const Acl *old_acl, Oid oldOwnerId, Oid newOwnerId)
#define RelationGetRelid(relation)
void IsThereOpFamilyInNamespace(const char *opfname, Oid opfmethod, Oid opfnamespace)
#define RelationGetNamespace(relation)