46 #include "utils/fmgroids.h"
47 #include "utils/fmgrprotos.h"
56 #define GETNEWOID_LOG_THRESHOLD 1000000
57 #define GETNEWOID_LOG_MAX_INTERVAL 128000000
169 Oid relnamespace = reltuple->relnamespace;
186 return namespaceId == PG_CATALOG_NAMESPACE;
204 return (namespaceId == PG_TOAST_NAMESPACE) ||
222 return (
name[0] ==
'p' &&
248 if (relationId == AuthIdRelationId ||
249 relationId == AuthMemRelationId ||
250 relationId == DatabaseRelationId ||
251 relationId == DbRoleSettingRelationId ||
252 relationId == ParameterAclRelationId ||
253 relationId == ReplicationOriginRelationId ||
254 relationId == SharedDependRelationId ||
255 relationId == SharedDescriptionRelationId ||
256 relationId == SharedSecLabelRelationId ||
257 relationId == SubscriptionRelationId ||
258 relationId == TableSpaceRelationId)
261 if (relationId == AuthIdOidIndexId ||
262 relationId == AuthIdRolnameIndexId ||
263 relationId == AuthMemMemRoleIndexId ||
264 relationId == AuthMemRoleMemIndexId ||
265 relationId == AuthMemOidIndexId ||
266 relationId == AuthMemGrantorIndexId ||
267 relationId == DatabaseNameIndexId ||
268 relationId == DatabaseOidIndexId ||
269 relationId == DbRoleSettingDatidRolidIndexId ||
270 relationId == ParameterAclOidIndexId ||
271 relationId == ParameterAclParnameIndexId ||
272 relationId == ReplicationOriginIdentIndex ||
273 relationId == ReplicationOriginNameIndex ||
274 relationId == SharedDependDependerIndexId ||
275 relationId == SharedDependReferenceIndexId ||
276 relationId == SharedDescriptionObjIndexId ||
277 relationId == SharedSecLabelObjectIndexId ||
278 relationId == SubscriptionNameIndexId ||
279 relationId == SubscriptionObjectIndexId ||
280 relationId == TablespaceNameIndexId ||
281 relationId == TablespaceOidIndexId)
284 if (relationId == PgAuthidToastTable ||
285 relationId == PgAuthidToastIndex ||
286 relationId == PgDatabaseToastTable ||
287 relationId == PgDatabaseToastIndex ||
288 relationId == PgDbRoleSettingToastTable ||
289 relationId == PgDbRoleSettingToastIndex ||
290 relationId == PgParameterAclToastTable ||
291 relationId == PgParameterAclToastIndex ||
292 relationId == PgReplicationOriginToastTable ||
293 relationId == PgReplicationOriginToastIndex ||
294 relationId == PgShdescriptionToastTable ||
295 relationId == PgShdescriptionToastIndex ||
296 relationId == PgShseclabelToastTable ||
297 relationId == PgShseclabelToastIndex ||
298 relationId == PgSubscriptionToastTable ||
299 relationId == PgSubscriptionToastIndex ||
300 relationId == PgTablespaceToastTable ||
301 relationId == PgTablespaceToastIndex)
329 if (classId == LargeObjectRelationId)
345 if (classId == NamespaceRelationId &&
346 objectId == PG_PUBLIC_NAMESPACE)
355 if (classId == DatabaseRelationId)
446 if (retries >= retries_before_log)
449 (
errmsg(
"still searching for an unused OID in relation \"%s\"",
451 errdetail_plural(
"OID candidates have been checked %llu time, but no unused OID has been found yet.",
452 "OID candidates have been checked %llu times, but no unused OID has been found yet.",
454 (
unsigned long long) retries)));
461 retries_before_log *= 2;
476 (
errmsg_plural(
"new OID has been assigned in relation \"%s\" after %llu retry",
477 "new OID has been assigned in relation \"%s\" after %llu retries",
516 switch (relpersistence)
518 case RELPERSISTENCE_TEMP:
521 case RELPERSISTENCE_UNLOGGED:
522 case RELPERSISTENCE_PERMANENT:
526 elog(
ERROR,
"invalid relpersistence: %c", relpersistence);
557 if (
access(rpath, F_OK) == 0)
608 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
609 errmsg(
"must be superuser to call %s()",
617 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
618 errmsg(
"pg_nextoid() can only be used on system catalogs")));
622 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
623 errmsg(
"index \"%s\" does not belong to table \"%s\"",
630 (
errcode(ERRCODE_UNDEFINED_COLUMN),
631 errmsg(
"column \"%s\" of relation \"%s\" does not exist",
635 attno = attform->attnum;
637 if (attform->atttypid != OIDOID)
639 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
640 errmsg(
"column \"%s\" is not of type oid",
644 idx->rd_index->indkey.values[0] != attno)
646 (
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
647 errmsg(
"index \"%s\" is not the index for column \"%s\"",
675 (
errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
676 errmsg(
"must be superuser to call %s()",
677 "pg_stop_making_pinned_objects")));
Datum idx(PG_FUNCTION_ARGS)
#define BackendIdForTempRelations()
bool IsToastRelation(Relation relation)
#define GETNEWOID_LOG_THRESHOLD
bool IsToastNamespace(Oid namespaceId)
bool IsSystemRelation(Relation relation)
Oid GetNewOidWithIndex(Relation relation, Oid indexId, AttrNumber oidcolumn)
RelFileNumber GetNewRelFileNumber(Oid reltablespace, Relation pg_class, char relpersistence)
bool IsCatalogNamespace(Oid namespaceId)
bool IsToastClass(Form_pg_class reltuple)
bool IsCatalogRelation(Relation relation)
bool IsPinnedObject(Oid classId, Oid objectId)
bool IsSharedRelation(Oid relationId)
bool IsCatalogRelationOid(Oid relid)
bool IsReservedName(const char *name)
#define GETNEWOID_LOG_MAX_INTERVAL
Datum pg_nextoid(PG_FUNCTION_ARGS)
bool IsSystemClass(Oid relid, Form_pg_class reltuple)
Datum pg_stop_making_pinned_objects(PG_FUNCTION_ARGS)
elog(ERROR, "%s: %s", p2, msg)
int errmsg_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
int errdetail_plural(const char *fmt_singular, const char *fmt_plural, unsigned long n,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
#define PG_GETARG_NAME(n)
void systable_endscan(SysScanDesc sysscan)
HeapTuple systable_getnext(SysScanDesc sysscan)
SysScanDesc systable_beginscan(Relation heapRelation, Oid indexId, bool indexOK, Snapshot snapshot, int nkeys, ScanKey key)
#define HeapTupleIsValid(tuple)
void index_close(Relation relation, LOCKMODE lockmode)
Relation index_open(Oid relationId, LOCKMODE lockmode)
Assert(fmt[strlen(fmt) - 1] !='\n')
void pfree(void *pointer)
#define IsBootstrapProcessingMode()
#define CHECK_FOR_INTERRUPTS()
bool isTempToastNamespace(Oid namespaceId)
FormData_pg_attribute * Form_pg_attribute
FormData_pg_class * Form_pg_class
static Datum ObjectIdGetDatum(Oid X)
#define RelationGetRelid(relation)
#define RelationGetRelationName(relation)
#define RelationGetNamespace(relation)
#define IndexRelationGetNumberOfKeyAttributes(relation)
#define relpath(rlocator, forknum)
#define InvalidRelFileNumber
void ScanKeyInit(ScanKey entry, AttrNumber attributeNumber, StrategyNumber strategy, RegProcedure procedure, Datum argument)
#define BTEqualStrategyNumber
void ReleaseSysCache(HeapTuple tuple)
HeapTuple SearchSysCacheAttName(Oid relid, const char *attname)
void table_close(Relation relation, LOCKMODE lockmode)
Relation table_open(Oid relationId, LOCKMODE lockmode)
#define FirstUnpinnedObjectId
void StopGeneratingPinnedObjectIds(void)