62#include "utils/fmgroids.h"
174 myself.objectId = objectId;
254 "multiple pg_shdepend entries for object %u/%u/%d deptype %c",
255 classid, objid, objsubid, deptype);
274 shForm->refobjid = refobjid;
284 memset(nulls,
false,
sizeof(nulls));
324 classId, objectId, 0,
400 classId, objectId, 0,
405 classId, objectId, 0,
true,
618 if (
obja->object.objectId <
objb->object.objectId)
620 if (
obja->object.objectId >
objb->object.objectId)
627 if (
obja->object.classId <
objb->object.classId)
629 if (
obja->object.classId >
objb->object.classId)
638 if ((
unsigned int)
obja->object.objectSubId < (
unsigned int)
objb->object.objectSubId)
640 if ((
unsigned int)
obja->object.objectSubId > (
unsigned int)
objb->object.objectSubId)
698 object.classId = classId;
699 object.objectId = objectId;
700 object.objectSubId = 0;
703 errmsg(
"cannot drop %s because it is required by the database system",
716#define MAX_REPORTED_DEPS 100
745 object.objectSubId =
sdepForm->objsubid;
841 object.objectId =
dep->dbOid;
842 object.objectSubId = 0;
869 "(see server log for list)",
870 "\nand %d other objects "
871 "(see server log for list)",
876 "(see server log for list)",
877 "\nand objects in %d other databases "
878 "(see server log for list)",
1085 memset(nulls,
false,
sizeof(nulls));
1222 errmsg(
"role %u was concurrently dropped",
1234 errmsg(
"tablespace %u was concurrently dropped",
1245 if (database ==
NULL)
1248 errmsg(
"database %u was concurrently dropped",
1256 elog(
ERROR,
"unrecognized shared classId: %u", classId);
1291 if (
descs->len != 0)
1309 elog(
ERROR,
"unrecognized dependency type: %d",
1379 errmsg(
"cannot drop objects owned by %s because they are "
1380 "required by the database system",
1413 elog(
ERROR,
"unexpected dependency type");
1560 errmsg(
"cannot reassign ownership of objects owned by %s because they are required by the database system",
1603 "shdepReassignOwned",
1622 elog(
ERROR,
"unrecognized dependency type: %d",
void RemoveRoleFromInitPriv(Oid roleid, Oid classid, Oid objid, int32 objsubid)
void ReplaceRoleInInitPriv(Oid oldroleid, Oid newroleid, Oid classid, Oid objid, int32 objsubid)
void RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid)
void AlterObjectOwner_internal(Oid classId, Oid objectId, Oid new_ownerId)
char * get_tablespace_name(Oid spc_oid)
static Datum values[MAXATTR]
#define ngettext(s, p, n)
#define Assert(condition)
#define OidIsValid(objectId)
bool IsPinnedObject(Oid classId, Oid objectId)
bool IsSharedRelation(Oid relationId)
void performMultipleDeletions(const ObjectAddresses *objects, DropBehavior behavior, int flags)
void sort_object_addresses(ObjectAddresses *addrs)
void AcquireDeletionLock(const ObjectAddress *object, int flags)
void ReleaseDeletionLock(const ObjectAddress *object)
void add_exact_object_address(const ObjectAddress *object, ObjectAddresses *addrs)
ObjectAddresses * new_object_addresses(void)
void free_object_addresses(ObjectAddresses *addrs)
@ SHARED_DEPENDENCY_INITACL
@ SHARED_DEPENDENCY_TABLESPACE
@ SHARED_DEPENDENCY_INVALID
@ SHARED_DEPENDENCY_POLICY
@ SHARED_DEPENDENCY_OWNER
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void AlterEventTriggerOwner_oid(Oid trigOid, Oid newOwnerId)
TupleTableSlot * MakeSingleTupleTableSlot(TupleDesc tupdesc, const TupleTableSlotOps *tts_ops)
void ExecDropSingleTupleTableSlot(TupleTableSlot *slot)
TupleTableSlot * ExecStoreVirtualTuple(TupleTableSlot *slot)
const TupleTableSlotOps TTSOpsHeapTuple
#define palloc_object(type)
#define palloc_array(type, count)
void AlterForeignServerOwner_oid(Oid srvId, Oid newOwnerId)
void AlterForeignDataWrapperOwner_oid(Oid fwdId, Oid newOwnerId)
void systable_endscan(SysScanDesc sysscan)
bool systable_recheck_tuple(SysScanDesc sysscan, HeapTuple tup)
HeapTuple systable_getnext(SysScanDesc sysscan)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
HeapTuple heap_copytuple(HeapTuple tuple)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
void heap_freetuple(HeapTuple htup)
#define HeapTupleIsValid(tuple)
static void * GETSTRUCT(const HeapTupleData *tuple)
void CatalogTuplesMultiInsertWithInfo(Relation heapRel, TupleTableSlot **slot, int ntuples, CatalogIndexState indstate)
void CatalogTupleUpdate(Relation heapRel, const ItemPointerData *otid, HeapTuple tup)
void CatalogCloseIndexes(CatalogIndexState indstate)
void CatalogTupleInsert(Relation heapRel, HeapTuple tup)
CatalogIndexState CatalogOpenIndexes(Relation heapRel)
void CatalogTupleDelete(Relation heapRel, const ItemPointerData *tid)
#define MAX_CATALOG_MULTI_INSERT_BYTES
List * lappend(List *list, void *datum)
void list_free_deep(List *list)
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
#define AccessExclusiveLock
char * get_database_name(Oid dbid)
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define IsBootstrapProcessingMode()
char * getObjectDescription(const ObjectAddress *object, bool missing_ok)
#define ObjectAddressSet(addr, class_id, object_id)
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
static void shdepDropDependency(Relation sdepRel, Oid classId, Oid objectId, int32 objsubId, bool drop_subobjects, Oid refclassId, Oid refobjId, SharedDependencyType deptype)
static int shared_dependency_comparator(const void *a, const void *b)
static void shdepReassignOwned_InitAcl(Form_pg_shdepend sdepForm, Oid oldrole, Oid newrole)
void dropDatabaseDependencies(Oid databaseId)
void changeDependencyOnOwner(Oid classId, Oid objectId, Oid newOwnerId)
static void shdepReassignOwned_Owner(Form_pg_shdepend sdepForm, Oid newrole)
static void getOidListDiff(Oid *list1, int *nlist1, Oid *list2, int *nlist2)
void copyTemplateDependencies(Oid templateDbId, Oid newDbId)
static Oid classIdGetDbId(Oid classId)
void deleteSharedDependencyRecordsFor(Oid classId, Oid objectId, int32 objectSubId)
void updateAclDependencies(Oid classId, Oid objectId, int32 objsubId, Oid ownerId, int noldmembers, Oid *oldmembers, int nnewmembers, Oid *newmembers)
void updateInitAclDependencies(Oid classId, Oid objectId, int32 objsubId, int noldmembers, Oid *oldmembers, int nnewmembers, Oid *newmembers)
#define MAX_REPORTED_DEPS
void recordDependencyOnOwner(Oid classId, Oid objectId, Oid owner)
bool checkSharedDependencies(Oid classId, Oid objectId, char **detail_msg, char **detail_log_msg)
void recordDependencyOnTablespace(Oid classId, Oid objectId, Oid tablespace)
static void shdepAddDependency(Relation sdepRel, Oid classId, Oid objectId, int32 objsubId, Oid refclassId, Oid refobjId, SharedDependencyType deptype)
void shdepDropOwned(List *roleids, DropBehavior behavior)
static void storeObjectDescription(StringInfo descs, SharedDependencyObjectType type, ObjectAddress *object, SharedDependencyType deptype, int count)
void recordSharedDependencyOn(ObjectAddress *depender, ObjectAddress *referenced, SharedDependencyType deptype)
void shdepLockAndCheckObject(Oid classId, Oid objectId)
void changeDependencyOnTablespace(Oid classId, Oid objectId, Oid newTablespaceId)
static void updateAclDependenciesWorker(Oid classId, Oid objectId, int32 objsubId, Oid ownerId, SharedDependencyType deptype, int noldmembers, Oid *oldmembers, int nnewmembers, Oid *newmembers)
SharedDependencyObjectType
void shdepReassignOwned(List *roleids, Oid newrole)
static void shdepChangeDep(Relation sdepRel, Oid classid, Oid objid, int32 objsubid, Oid refclassid, Oid refobjid, SharedDependencyType deptype)
FormData_pg_shdepend * Form_pg_shdepend
bool RemoveRoleFromObjectPolicy(Oid roleid, Oid classid, Oid policy_id)
#define qsort(a, b, c, d)
static Datum ObjectIdGetDatum(Oid X)
static Datum Int32GetDatum(int32 X)
static Datum CharGetDatum(char X)
void AlterPublicationOwner_oid(Oid pubid, Oid newOwnerId)
#define RelationGetDescr(relation)
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
void AlterSchemaOwner_oid(Oid schemaoid, Oid newOwnerId)
#define BTEqualStrategyNumber
void appendStringInfo(StringInfo str, const char *fmt,...)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
SharedDependencyObjectType objtype
void AlterSubscriptionOwner_oid(Oid subid, Oid newOwnerId)
#define SearchSysCacheExists1(cacheId, key1)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
void ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing, LOCKMODE lockmode)
static TupleTableSlot * ExecClearTuple(TupleTableSlot *slot)
void AlterTypeOwner_oid(Oid typeOid, Oid newOwnerId, bool hasDependEntry)
void CommandCounterIncrement(void)