PostgreSQL Source Code  git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
syscache.h File Reference
#include "access/attnum.h"
#include "access/htup.h"
#include "catalog/syscache_ids.h"
Include dependency graph for syscache.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SearchSysCacheCopy1(cacheId, key1)    SearchSysCacheCopy(cacheId, key1, 0, 0, 0)
 
#define SearchSysCacheCopy2(cacheId, key1, key2)    SearchSysCacheCopy(cacheId, key1, key2, 0, 0)
 
#define SearchSysCacheCopy3(cacheId, key1, key2, key3)    SearchSysCacheCopy(cacheId, key1, key2, key3, 0)
 
#define SearchSysCacheCopy4(cacheId, key1, key2, key3, key4)    SearchSysCacheCopy(cacheId, key1, key2, key3, key4)
 
#define SearchSysCacheExists1(cacheId, key1)    SearchSysCacheExists(cacheId, key1, 0, 0, 0)
 
#define SearchSysCacheExists2(cacheId, key1, key2)    SearchSysCacheExists(cacheId, key1, key2, 0, 0)
 
#define SearchSysCacheExists3(cacheId, key1, key2, key3)    SearchSysCacheExists(cacheId, key1, key2, key3, 0)
 
#define SearchSysCacheExists4(cacheId, key1, key2, key3, key4)    SearchSysCacheExists(cacheId, key1, key2, key3, key4)
 
#define GetSysCacheOid1(cacheId, oidcol, key1)    GetSysCacheOid(cacheId, oidcol, key1, 0, 0, 0)
 
#define GetSysCacheOid2(cacheId, oidcol, key1, key2)    GetSysCacheOid(cacheId, oidcol, key1, key2, 0, 0)
 
#define GetSysCacheOid3(cacheId, oidcol, key1, key2, key3)    GetSysCacheOid(cacheId, oidcol, key1, key2, key3, 0)
 
#define GetSysCacheOid4(cacheId, oidcol, key1, key2, key3, key4)    GetSysCacheOid(cacheId, oidcol, key1, key2, key3, key4)
 
#define GetSysCacheHashValue1(cacheId, key1)    GetSysCacheHashValue(cacheId, key1, 0, 0, 0)
 
#define GetSysCacheHashValue2(cacheId, key1, key2)    GetSysCacheHashValue(cacheId, key1, key2, 0, 0)
 
#define GetSysCacheHashValue3(cacheId, key1, key2, key3)    GetSysCacheHashValue(cacheId, key1, key2, key3, 0)
 
#define GetSysCacheHashValue4(cacheId, key1, key2, key3, key4)    GetSysCacheHashValue(cacheId, key1, key2, key3, key4)
 
#define SearchSysCacheList1(cacheId, key1)    SearchSysCacheList(cacheId, 1, key1, 0, 0)
 
#define SearchSysCacheList2(cacheId, key1, key2)    SearchSysCacheList(cacheId, 2, key1, key2, 0)
 
#define SearchSysCacheList3(cacheId, key1, key2, key3)    SearchSysCacheList(cacheId, 3, key1, key2, key3)
 
#define ReleaseSysCacheList(x)   ReleaseCatCacheList(x)
 

Functions

void InitCatalogCache (void)
 
void InitCatalogCachePhase2 (void)
 
HeapTuple SearchSysCache (int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
 
HeapTuple SearchSysCache1 (int cacheId, Datum key1)
 
HeapTuple SearchSysCache2 (int cacheId, Datum key1, Datum key2)
 
HeapTuple SearchSysCache3 (int cacheId, Datum key1, Datum key2, Datum key3)
 
HeapTuple SearchSysCache4 (int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
 
void ReleaseSysCache (HeapTuple tuple)
 
HeapTuple SearchSysCacheLocked1 (int cacheId, Datum key1)
 
HeapTuple SearchSysCacheCopy (int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
 
HeapTuple SearchSysCacheLockedCopy1 (int cacheId, Datum key1)
 
bool SearchSysCacheExists (int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
 
Oid GetSysCacheOid (int cacheId, AttrNumber oidcol, Datum key1, Datum key2, Datum key3, Datum key4)
 
HeapTuple SearchSysCacheAttName (Oid relid, const char *attname)
 
HeapTuple SearchSysCacheCopyAttName (Oid relid, const char *attname)
 
bool SearchSysCacheExistsAttName (Oid relid, const char *attname)
 
HeapTuple SearchSysCacheAttNum (Oid relid, int16 attnum)
 
HeapTuple SearchSysCacheCopyAttNum (Oid relid, int16 attnum)
 
Datum SysCacheGetAttr (int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
 
Datum SysCacheGetAttrNotNull (int cacheId, HeapTuple tup, AttrNumber attributeNumber)
 
uint32 GetSysCacheHashValue (int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
 
struct catclistSearchSysCacheList (int cacheId, int nkeys, Datum key1, Datum key2, Datum key3)
 
void SysCacheInvalidate (int cacheId, uint32 hashValue)
 
bool RelationInvalidatesSnapshotsOnly (Oid relid)
 
bool RelationHasSysCache (Oid relid)
 
bool RelationSupportsSysCache (Oid relid)
 

Macro Definition Documentation

◆ GetSysCacheHashValue1

#define GetSysCacheHashValue1 (   cacheId,
  key1 
)     GetSysCacheHashValue(cacheId, key1, 0, 0, 0)

Definition at line 118 of file syscache.h.

◆ GetSysCacheHashValue2

#define GetSysCacheHashValue2 (   cacheId,
  key1,
  key2 
)     GetSysCacheHashValue(cacheId, key1, key2, 0, 0)

Definition at line 120 of file syscache.h.

◆ GetSysCacheHashValue3

#define GetSysCacheHashValue3 (   cacheId,
  key1,
  key2,
  key3 
)     GetSysCacheHashValue(cacheId, key1, key2, key3, 0)

Definition at line 122 of file syscache.h.

◆ GetSysCacheHashValue4

#define GetSysCacheHashValue4 (   cacheId,
  key1,
  key2,
  key3,
  key4 
)     GetSysCacheHashValue(cacheId, key1, key2, key3, key4)

Definition at line 124 of file syscache.h.

◆ GetSysCacheOid1

#define GetSysCacheOid1 (   cacheId,
  oidcol,
  key1 
)     GetSysCacheOid(cacheId, oidcol, key1, 0, 0, 0)

Definition at line 109 of file syscache.h.

◆ GetSysCacheOid2

#define GetSysCacheOid2 (   cacheId,
  oidcol,
  key1,
  key2 
)     GetSysCacheOid(cacheId, oidcol, key1, key2, 0, 0)

Definition at line 111 of file syscache.h.

◆ GetSysCacheOid3

#define GetSysCacheOid3 (   cacheId,
  oidcol,
  key1,
  key2,
  key3 
)     GetSysCacheOid(cacheId, oidcol, key1, key2, key3, 0)

Definition at line 113 of file syscache.h.

◆ GetSysCacheOid4

#define GetSysCacheOid4 (   cacheId,
  oidcol,
  key1,
  key2,
  key3,
  key4 
)     GetSysCacheOid(cacheId, oidcol, key1, key2, key3, key4)

Definition at line 115 of file syscache.h.

◆ ReleaseSysCacheList

#define ReleaseSysCacheList (   x)    ReleaseCatCacheList(x)

Definition at line 134 of file syscache.h.

◆ SearchSysCacheCopy1

#define SearchSysCacheCopy1 (   cacheId,
  key1 
)     SearchSysCacheCopy(cacheId, key1, 0, 0, 0)

Definition at line 91 of file syscache.h.

◆ SearchSysCacheCopy2

#define SearchSysCacheCopy2 (   cacheId,
  key1,
  key2 
)     SearchSysCacheCopy(cacheId, key1, key2, 0, 0)

Definition at line 93 of file syscache.h.

◆ SearchSysCacheCopy3

#define SearchSysCacheCopy3 (   cacheId,
  key1,
  key2,
  key3 
)     SearchSysCacheCopy(cacheId, key1, key2, key3, 0)

Definition at line 95 of file syscache.h.

◆ SearchSysCacheCopy4

#define SearchSysCacheCopy4 (   cacheId,
  key1,
  key2,
  key3,
  key4 
)     SearchSysCacheCopy(cacheId, key1, key2, key3, key4)

Definition at line 97 of file syscache.h.

◆ SearchSysCacheExists1

#define SearchSysCacheExists1 (   cacheId,
  key1 
)     SearchSysCacheExists(cacheId, key1, 0, 0, 0)

Definition at line 100 of file syscache.h.

◆ SearchSysCacheExists2

#define SearchSysCacheExists2 (   cacheId,
  key1,
  key2 
)     SearchSysCacheExists(cacheId, key1, key2, 0, 0)

Definition at line 102 of file syscache.h.

◆ SearchSysCacheExists3

#define SearchSysCacheExists3 (   cacheId,
  key1,
  key2,
  key3 
)     SearchSysCacheExists(cacheId, key1, key2, key3, 0)

Definition at line 104 of file syscache.h.

◆ SearchSysCacheExists4

#define SearchSysCacheExists4 (   cacheId,
  key1,
  key2,
  key3,
  key4 
)     SearchSysCacheExists(cacheId, key1, key2, key3, key4)

Definition at line 106 of file syscache.h.

◆ SearchSysCacheList1

#define SearchSysCacheList1 (   cacheId,
  key1 
)     SearchSysCacheList(cacheId, 1, key1, 0, 0)

Definition at line 127 of file syscache.h.

◆ SearchSysCacheList2

#define SearchSysCacheList2 (   cacheId,
  key1,
  key2 
)     SearchSysCacheList(cacheId, 2, key1, key2, 0)

Definition at line 129 of file syscache.h.

◆ SearchSysCacheList3

#define SearchSysCacheList3 (   cacheId,
  key1,
  key2,
  key3 
)     SearchSysCacheList(cacheId, 3, key1, key2, key3)

Definition at line 131 of file syscache.h.

Function Documentation

◆ GetSysCacheHashValue()

uint32 GetSysCacheHashValue ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 656 of file syscache.c.

661 {
662  if (cacheId < 0 || cacheId >= SysCacheSize ||
663  !PointerIsValid(SysCache[cacheId]))
664  elog(ERROR, "invalid cache ID: %d", cacheId);
665 
666  return GetCatCacheHashValue(SysCache[cacheId], key1, key2, key3, key4);
667 }
#define PointerIsValid(pointer)
Definition: c.h:768
uint32 GetCatCacheHashValue(CatCache *cache, Datum v1, Datum v2, Datum v3, Datum v4)
Definition: catcache.c:1612
#define ERROR
Definition: elog.h:39
#define elog(elevel,...)
Definition: elog.h:225
static CatCache * SysCache[SysCacheSize]
Definition: syscache.c:86

References elog, ERROR, GetCatCacheHashValue(), PointerIsValid, and SysCache.

◆ GetSysCacheOid()

Oid GetSysCacheOid ( int  cacheId,
AttrNumber  oidcol,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 443 of file syscache.c.

449 {
450  HeapTuple tuple;
451  bool isNull;
452  Oid result;
453 
454  tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
455  if (!HeapTupleIsValid(tuple))
456  return InvalidOid;
457  result = heap_getattr(tuple, oidcol,
458  SysCache[cacheId]->cc_tupdesc,
459  &isNull);
460  Assert(!isNull); /* columns used as oids should never be NULL */
461  ReleaseSysCache(tuple);
462  return result;
463 }
#define Assert(condition)
Definition: c.h:863
#define HeapTupleIsValid(tuple)
Definition: htup.h:78
static Datum heap_getattr(HeapTuple tup, int attnum, TupleDesc tupleDesc, bool *isnull)
Definition: htup_details.h:792
#define InvalidOid
Definition: postgres_ext.h:36
unsigned int Oid
Definition: postgres_ext.h:31
void ReleaseSysCache(HeapTuple tuple)
Definition: syscache.c:269
HeapTuple SearchSysCache(int cacheId, Datum key1, Datum key2, Datum key3, Datum key4)
Definition: syscache.c:208

References Assert, heap_getattr(), HeapTupleIsValid, InvalidOid, ReleaseSysCache(), SearchSysCache(), and SysCache.

◆ InitCatalogCache()

void InitCatalogCache ( void  )

Definition at line 110 of file syscache.c.

111 {
112  int cacheId;
113 
115 
117 
118  for (cacheId = 0; cacheId < SysCacheSize; cacheId++)
119  {
120  /*
121  * Assert that every enumeration value defined in syscache.h has been
122  * populated in the cacheinfo array.
123  */
124  Assert(OidIsValid(cacheinfo[cacheId].reloid));
125  Assert(OidIsValid(cacheinfo[cacheId].indoid));
126  /* .nbuckets and .key[] are checked by InitCatCache() */
127 
128  SysCache[cacheId] = InitCatCache(cacheId,
129  cacheinfo[cacheId].reloid,
130  cacheinfo[cacheId].indoid,
131  cacheinfo[cacheId].nkeys,
132  cacheinfo[cacheId].key,
133  cacheinfo[cacheId].nbuckets);
134  if (!PointerIsValid(SysCache[cacheId]))
135  elog(ERROR, "could not initialize cache %u (%d)",
136  cacheinfo[cacheId].reloid, cacheId);
137  /* Accumulate data for OID lists, too */
139  cacheinfo[cacheId].reloid;
141  cacheinfo[cacheId].reloid;
143  cacheinfo[cacheId].indoid;
144  /* see comments for RelationInvalidatesSnapshotsOnly */
145  Assert(!RelationInvalidatesSnapshotsOnly(cacheinfo[cacheId].reloid));
146  }
147 
150 
151  /* Sort and de-dup OID arrays, so we can use binary search. */
153  sizeof(Oid), oid_compare);
156  oid_compare);
157 
159  sizeof(Oid), oid_compare);
162  sizeof(Oid), oid_compare);
163 
164  CacheInitialized = true;
165 }
#define lengthof(array)
Definition: c.h:793
#define OidIsValid(objectId)
Definition: c.h:780
CatCache * InitCatCache(int id, Oid reloid, Oid indexoid, int nkeys, const int *key, int nbuckets)
Definition: catcache.c:828
#define qsort(a, b, c, d)
Definition: port.h:447
static size_t qunique(void *array, size_t elements, size_t width, int(*compare)(const void *, const void *))
Definition: qunique.h:21
static bool CacheInitialized
Definition: syscache.c:88
static int oid_compare(const void *a, const void *b)
Definition: syscache.c:790
static int SysCacheSupportingRelOidSize
Definition: syscache.c:96
static Oid SysCacheRelationOid[SysCacheSize]
Definition: syscache.c:91
static Oid SysCacheSupportingRelOid[SysCacheSize *2]
Definition: syscache.c:95
static int SysCacheRelationOidSize
Definition: syscache.c:92
bool RelationInvalidatesSnapshotsOnly(Oid relid)
Definition: syscache.c:717

References Assert, CacheInitialized, elog, ERROR, InitCatCache(), sort-test::key, lengthof, oid_compare(), OidIsValid, PointerIsValid, qsort, qunique(), RelationInvalidatesSnapshotsOnly(), SysCache, SysCacheRelationOid, SysCacheRelationOidSize, SysCacheSupportingRelOid, and SysCacheSupportingRelOidSize.

Referenced by InitPostgres().

◆ InitCatalogCachePhase2()

void InitCatalogCachePhase2 ( void  )

Definition at line 180 of file syscache.c.

181 {
182  int cacheId;
183 
185 
186  for (cacheId = 0; cacheId < SysCacheSize; cacheId++)
187  InitCatCachePhase2(SysCache[cacheId], true);
188 }
void InitCatCachePhase2(CatCache *cache, bool touch_index)
Definition: catcache.c:1145

References Assert, CacheInitialized, InitCatCachePhase2(), and SysCache.

Referenced by RelationCacheInitializePhase3().

◆ RelationHasSysCache()

bool RelationHasSysCache ( Oid  relid)

Definition at line 740 of file syscache.c.

741 {
742  int low = 0,
743  high = SysCacheRelationOidSize - 1;
744 
745  while (low <= high)
746  {
747  int middle = low + (high - low) / 2;
748 
749  if (SysCacheRelationOid[middle] == relid)
750  return true;
751  if (SysCacheRelationOid[middle] < relid)
752  low = middle + 1;
753  else
754  high = middle - 1;
755  }
756 
757  return false;
758 }

References SysCacheRelationOid, and SysCacheRelationOidSize.

Referenced by GetNonHistoricCatalogSnapshot().

◆ RelationInvalidatesSnapshotsOnly()

bool RelationInvalidatesSnapshotsOnly ( Oid  relid)

Definition at line 717 of file syscache.c.

718 {
719  switch (relid)
720  {
721  case DbRoleSettingRelationId:
722  case DependRelationId:
723  case SharedDependRelationId:
724  case DescriptionRelationId:
725  case SharedDescriptionRelationId:
726  case SecLabelRelationId:
727  case SharedSecLabelRelationId:
728  return true;
729  default:
730  break;
731  }
732 
733  return false;
734 }

Referenced by CacheInvalidateHeapTupleCommon(), GetNonHistoricCatalogSnapshot(), and InitCatalogCache().

◆ RelationSupportsSysCache()

bool RelationSupportsSysCache ( Oid  relid)

Definition at line 765 of file syscache.c.

766 {
767  int low = 0,
768  high = SysCacheSupportingRelOidSize - 1;
769 
770  while (low <= high)
771  {
772  int middle = low + (high - low) / 2;
773 
774  if (SysCacheSupportingRelOid[middle] == relid)
775  return true;
776  if (SysCacheSupportingRelOid[middle] < relid)
777  low = middle + 1;
778  else
779  high = middle - 1;
780  }
781 
782  return false;
783 }

References SysCacheSupportingRelOid, and SysCacheSupportingRelOidSize.

Referenced by RelationIdIsInInitFile().

◆ ReleaseSysCache()

void ReleaseSysCache ( HeapTuple  tuple)

Definition at line 269 of file syscache.c.

270 {
271  ReleaseCatCache(tuple);
272 }
void ReleaseCatCache(HeapTuple tuple)
Definition: catcache.c:1573

References ReleaseCatCache().

Referenced by aclitemout(), add_cast_to(), add_function_cost(), AddEnumLabel(), AddRoleMems(), agg_args_support_sendreceive(), AggregateCreate(), AlterDomainValidateConstraint(), AlterEnum(), AlterObjectRename_internal(), AlterOpFamily(), AlterPublicationOptions(), AlterPublicationSchemas(), AlterPublicationTables(), AlterRole(), AlterRoleSet(), AlterSchemaOwner(), AlterSchemaOwner_oid(), AlterStatistics(), AlterTSConfiguration(), AlterTSDictionary(), AlterType(), AlterTypeOwner(), AlterTypeOwner_oid(), AlterTypeRecurse(), amvalidate(), appendFunctionName(), appendOrderBySuffix(), assignOperTypes(), assignProcTypes(), ATAddForeignKeyConstraint(), ATDetachCheckNoForeignKeyRefs(), ATExecAddOf(), ATExecAlterColumnGenericOptions(), ATExecAlterColumnType(), ATExecAlterConstraint(), ATExecChangeOwner(), ATExecDropColumn(), ATExecSetExpression(), ATExecSetOptions(), ATExecSetRelOptions(), ATExecSetStatistics(), ATPostAlterTypeCleanup(), ATPrepAddPrimaryKey(), ATPrepAlterColumnType(), attribute_statistics_update(), blvalidate(), brincostestimate(), brinvalidate(), btcostestimate(), btvalidate(), build_coercion_expression(), CacheInvalidateRelcacheByRelid(), call_pltcl_start_proc(), CallStmtResultDesc(), check_amop_signature(), check_amproc_signature(), check_and_fetch_column_list(), check_default_text_search_config(), check_enable_rls(), check_for_column_name_collision(), check_object_ownership(), check_role(), check_session_authorization(), CheckFunctionValidatorAccess(), CheckIndexCompatible(), CheckMyDatabase(), CloneFkReferenced(), CloneFkReferencing(), coerce_type(), CollationIsVisibleExt(), compatible_oper(), compatible_oper_opid(), compile_plperl_function(), compile_pltcl_function(), compute_return_type(), ComputeIndexAttrs(), ComputePartitionAttrs(), ConstraintSetParentConstraint(), ConstructTupleDescriptor(), ConversionIsVisibleExt(), convert_column_name(), create_pg_locale(), CreateCast(), CreateFunction(), CreateProceduralLanguage(), CreateRole(), CreateSchemaCommand(), CreateStatistics(), CreateTransform(), database_is_invalid_oid(), DefineCollation(), DefineDomain(), DefineIndex(), DefineOpClass(), DefineTSConfiguration(), DefineType(), delete_pg_statistic(), DeleteRelationTuple(), DeleteSequenceTuple(), deparseOpExpr(), deparseScalarArrayOpExpr(), DetachPartitionFinalize(), do_autovacuum(), do_compile(), do_setval(), DropObjectById(), DropRole(), DropSubscription(), enum_cmp_internal(), enum_in(), enum_out(), enum_recv(), enum_send(), errdatatype(), eval_const_expressions_mutator(), examine_attribute(), examine_simple_variable(), examine_variable(), ExecGrant_Attribute(), ExecGrant_common(), ExecGrant_Parameter(), ExecGrant_Relation(), ExecHashBuildSkewHash(), ExecInitAgg(), ExecuteCallStmt(), ExecuteDoStmt(), expand_all_col_privileges(), expand_vacuum_rel(), fetch_agg_sort_op(), fetch_fp_info(), fillTypeDesc(), find_coercion_pathway(), find_typmod_coercion_function(), fixup_whole_row_references(), flatten_reloptions(), fmgr_c_validator(), fmgr_info_cxt_security(), fmgr_info_other_lang(), fmgr_internal_validator(), fmgr_security_definer(), fmgr_sql_validator(), fmgr_symbol(), format_operator_extended(), format_operator_parts(), format_procedure_extended(), format_procedure_parts(), format_type_extended(), func_get_detail(), func_parallel(), func_strict(), func_volatile(), FuncNameAsType(), FunctionIsVisibleExt(), generate_collation_name(), generate_function_name(), generate_operator_clause(), generate_operator_name(), generate_partition_qual(), generate_qualified_relation_name(), generate_qualified_type_name(), generate_relation_name(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), get_am_name(), get_am_type_oid(), get_array_type(), get_attavgwidth(), get_attgenerated(), get_attname(), get_attnum(), get_attoptions(), get_attr_stat_type(), get_attribute_options(), get_attstatsslot(), get_atttype(), get_atttypetypmodcoll(), get_base_element_type(), get_collation(), get_collation_isdeterministic(), get_collation_name(), get_commutator(), get_constraint_index(), get_constraint_name(), get_constraint_type(), get_database_name(), get_db_info(), get_default_acl_internal(), get_default_partition_oid(), get_element_type(), get_extension_name(), get_extension_schema(), get_func_leakproof(), get_func_name(), get_func_namespace(), get_func_nargs(), get_func_prokind(), get_func_result_name(), get_func_retset(), get_func_rettype(), get_func_signature(), get_func_support(), get_func_variadictype(), get_function_rows(), get_index_column_opclass(), get_index_isclustered(), get_index_isreplident(), get_index_isvalid(), get_language_name(), get_multirange_range(), get_namespace_name(), get_negator(), get_object_address_defacl(), get_object_address_opf_member(), get_object_address_type(), get_object_address_usermapping(), get_object_namespace(), get_op_opfamily_properties(), get_op_opfamily_sortfamily(), get_op_opfamily_strategy(), get_op_rettype(), get_opclass(), get_opclass_family(), get_opclass_input_type(), get_opclass_method(), get_opclass_name(), get_opclass_oid(), get_opclass_opfamily_and_input_type(), get_opcode(), get_opfamily_member(), get_opfamily_oid(), get_opfamily_proc(), get_opname(), get_oprjoin(), get_oprrest(), get_publication_name(), get_qual_for_range(), get_range_collation(), get_range_multirange(), get_range_subtype(), get_rel_name(), get_rel_namespace(), get_rel_persistence(), get_rel_relam(), get_rel_relispartition(), get_rel_relkind(), get_rel_tablespace(), get_rel_type_id(), get_relation_statistics(), get_relation_statistics_worker(), get_rewrite_oid(), get_ri_constraint_root(), get_role_password(), get_rolespec_name(), get_rte_attribute_is_dropped(), get_subscription_name(), get_tablespace(), get_transform_fromsql(), get_transform_tosql(), get_typ_typrelid(), get_typbyval(), get_typcollation(), get_typdefault(), get_type_category_preferred(), get_type_io_data(), get_typisdefined(), get_typlen(), get_typlenbyval(), get_typlenbyvalalign(), get_typmodin(), get_typstorage(), get_typsubscript(), get_typtype(), getBaseTypeAndTypmod(), GetFdwRoutineByServerId(), GetForeignColumnOptions(), GetForeignDataWrapperExtended(), GetForeignServerExtended(), GetForeignServerIdByRelId(), GetForeignTable(), GetIndexAmRoutineByAmId(), getObjectDescription(), getObjectIdentityParts(), getOpFamilyDescription(), getOpFamilyIdentity(), getProcedureTypeDescription(), GetPublication(), getPublicationSchemaInfo(), getRelationDescription(), getRelationIdentity(), getRelationTypeDescription(), GetSubscription(), GetSubscriptionRelState(), GetSysCacheOid(), getTypeBinaryInputInfo(), getTypeBinaryOutputInfo(), getTypeInputInfo(), getTypeOutputInfo(), GetUserMapping(), GetUserNameFromId(), ginvalidate(), gistvalidate(), has_bypassrls_privilege(), has_createrole_privilege(), has_rolreplication(), has_subclass(), hash_ok_operator(), hashvalidate(), have_createdb_privilege(), heap_drop_with_catalog(), inclusion_get_strategy_procinfo(), index_check_primary_key(), index_concurrently_create_copy(), index_create(), index_drop(), index_get_partition(), indexam_property(), IndexGetRelation(), IndexSupportsBackwardScan(), init_database_collation(), init_sql_fcache(), initialize_peragg(), InitializeSessionUserId(), inline_set_returning_function(), InsertRule(), internal_get_result_type(), interpret_function_parameter_list(), IsBinaryCoercibleWithCast(), load_domaintype_info(), load_rangetype_info(), logicalrep_write_tuple(), logicalrep_write_typ(), lookup_collation(), lookup_ts_config_cache(), lookup_ts_dictionary_cache(), lookup_ts_parser_cache(), lookup_type_cache(), LookupTypeNameOid(), make_callstmt_target(), make_inh_translation_list(), make_new_heap(), make_op(), make_scalar_array_op(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), minmax_get_strategy_procinfo(), minmax_multi_get_strategy_procinfo(), nextval_internal(), object_aclmask_ext(), object_ownercheck(), op_hashjoinable(), op_input_types(), op_mergejoinable(), OpclassIsVisibleExt(), OperatorGet(), OperatorIsVisibleExt(), OpernameGetOprid(), OpfamilyIsVisibleExt(), ParseFuncOrColumn(), parseTypeString(), pg_attribute_aclcheck_all_ext(), pg_attribute_aclmask_ext(), pg_basetype(), pg_class_aclmask_ext(), pg_collation_actual_version(), pg_database_collation_actual_version(), pg_get_constraintdef_worker(), pg_get_function_arg_default(), pg_get_function_arguments(), pg_get_function_identity_arguments(), pg_get_function_result(), pg_get_function_sqlbody(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_statisticsobj_worker(), pg_get_statisticsobjdef_expressions(), pg_get_userbyid(), pg_namespace_aclmask_ext(), pg_nextoid(), pg_parameter_acl_aclmask(), pg_parameter_aclmask(), pg_relation_filenode(), pg_relation_filepath(), pg_relation_is_publishable(), pg_sequence_parameters(), pg_type_aclmask_ext(), pgoutput_row_filter_init(), plperl_validator(), plpgsql_build_datatype(), plpgsql_compile(), plpgsql_parse_cwordtype(), plpgsql_validator(), plpython3_validator(), plsample_func_handler(), plsample_trigger_handler(), PLy_procedure_create(), PLy_procedure_get(), postgres_fdw_get_connections_internal(), prepare_column_cache(), preprocess_aggref(), preprocessNamespacePath(), print_function_arguments(), ProcedureCreate(), pub_collist_contains_invalid_column(), pub_rf_contains_invalid_column(), RangeVarCallbackForAlterRelation(), RangeVarCallbackForAttachIndex(), RangeVarCallbackForDropRelation(), RangeVarCallbackForPolicy(), RangeVarCallbackForRenameAttribute(), RangeVarCallbackForRenameRule(), RangeVarCallbackForRenameTrigger(), RangeVarCallbackForTruncate(), RangeVarCallbackOwnsRelation(), recordExtObjInitPriv(), refresh_by_match_merge(), regclassout(), regcollationout(), regconfigout(), regdictionaryout(), regoperout(), regprocout(), regtypeout(), RelationBuildPartitionDesc(), RelationBuildPartitionKey(), RelationBuildPublicationDesc(), RelationCacheInitializePhase3(), RelationClearMissing(), relationHasPrimaryKey(), RelationInitIndexAccessInfo(), RelationInitTableAccessMethod(), RelationIsVisibleExt(), RelationReloadIndexInfo(), RemoveConstraintById(), removeExtObjInitPriv(), RemoveFunctionById(), RemoveOperatorById(), RemovePartitionKeyByRelId(), RemovePublicationById(), RemovePublicationRelById(), RemovePublicationSchemaById(), RemoveRoleFromInitPriv(), RemoveRoleFromObjectPolicy(), RemoveStatisticsById(), RemoveStatisticsDataById(), RemoveTSConfigurationById(), RemoveTypeById(), rename_constraint_internal(), RenameConstraint(), RenameRole(), replorigin_by_name(), replorigin_by_oid(), replorigin_drop_by_name(), ResetSequence(), ResolveOpClass(), ri_GenerateQualCollation(), ri_LoadConstraintInfo(), roles_is_member_of(), SearchSysCacheAttName(), SearchSysCacheAttNum(), SearchSysCacheCopy(), SearchSysCacheCopyAttName(), SearchSysCacheCopyAttNum(), SearchSysCacheExists(), SearchSysCacheExistsAttName(), SearchSysCacheLocked1(), SearchSysCacheLockedCopy1(), sepgsql_proc_setattr(), sepgsql_relation_setattr(), sequence_options(), SetAttrMissing(), SetDefaultACL(), simplify_function(), spgvalidate(), SPI_gettype(), statext_dependencies_load(), statext_expressions_load(), statext_mcv_load(), statext_ndistinct_load(), StatisticsGetRelation(), StatisticsObjIsVisibleExt(), superuser_arg(), transformCallStmt(), transformColumnDefinition(), transformColumnNameList(), transformColumnType(), transformFkeyCheckAttrs(), transformFkeyGetPrimaryKey(), transformOfType(), triggered_change_notification(), tryAttachPartitionForeignKey(), TryReuseForeignKey(), TSConfigIsVisibleExt(), TSDictionaryIsVisibleExt(), TSParserIsVisibleExt(), TSTemplateIsVisibleExt(), TupleDescInitEntry(), typeidTypeRelid(), typeIsOfTypedTable(), TypeIsVisibleExt(), typenameTypeId(), typenameTypeIdAndMod(), typeOrDomainTypeRelid(), update_attstats(), validatePartitionedIndex(), and verify_dictoptions().

◆ SearchSysCache()

HeapTuple SearchSysCache ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 208 of file syscache.c.

213 {
214  Assert(cacheId >= 0 && cacheId < SysCacheSize &&
215  PointerIsValid(SysCache[cacheId]));
216 
217  return SearchCatCache(SysCache[cacheId], key1, key2, key3, key4);
218 }
HeapTuple SearchCatCache(CatCache *cache, Datum v1, Datum v2, Datum v3, Datum v4)
Definition: catcache.c:1262

References Assert, PointerIsValid, SearchCatCache(), and SysCache.

Referenced by GetSysCacheOid(), SearchSysCacheCopy(), and SearchSysCacheExists().

◆ SearchSysCache1()

HeapTuple SearchSysCache1 ( int  cacheId,
Datum  key1 
)

Definition at line 221 of file syscache.c.

223 {
224  Assert(cacheId >= 0 && cacheId < SysCacheSize &&
225  PointerIsValid(SysCache[cacheId]));
226  Assert(SysCache[cacheId]->cc_nkeys == 1);
227 
228  return SearchCatCache1(SysCache[cacheId], key1);
229 }
HeapTuple SearchCatCache1(CatCache *cache, Datum v1)
Definition: catcache.c:1279

References Assert, PointerIsValid, SearchCatCache1(), and SysCache.

Referenced by aclitemout(), add_cast_to(), add_function_cost(), AddRoleMems(), agg_args_support_sendreceive(), AggregateCreate(), AlterDomainValidateConstraint(), AlterEnum(), AlterObjectRename_internal(), AlterOpFamily(), AlterSchemaOwner(), AlterSchemaOwner_oid(), AlterStatistics(), AlterTSDictionary(), AlterTypeOwner_oid(), AlterTypeRecurse(), amvalidate(), appendFunctionName(), appendOrderBySuffix(), assignOperTypes(), assignProcTypes(), ATAddForeignKeyConstraint(), ATDetachCheckNoForeignKeyRefs(), ATExecAlterColumnGenericOptions(), ATExecAlterConstraint(), ATExecChangeOwner(), ATExecSetRelOptions(), ATPostAlterTypeCleanup(), blvalidate(), brinvalidate(), btvalidate(), build_coercion_expression(), CacheInvalidateRelcacheByRelid(), call_pltcl_start_proc(), CallStmtResultDesc(), check_amop_signature(), check_amproc_signature(), check_default_text_search_config(), check_enable_rls(), check_object_ownership(), check_role(), check_session_authorization(), CheckFunctionValidatorAccess(), CheckIndexCompatible(), CheckMyDatabase(), CloneFkReferenced(), CloneFkReferencing(), CollationIsVisibleExt(), compile_plperl_function(), compile_pltcl_function(), ComputeIndexAttrs(), ConstraintSetParentConstraint(), ConstructTupleDescriptor(), ConversionIsVisibleExt(), create_pg_locale(), CreateCast(), CreateEventTrigger(), CreateFunction(), CreateProceduralLanguage(), CreateSchemaCommand(), CreateTransform(), database_is_invalid_oid(), DefineCollation(), DefineIndex(), DefineOpClass(), DefineTSConfiguration(), DeleteRelationTuple(), DeleteSequenceTuple(), deparseOpExpr(), deparseScalarArrayOpExpr(), DetachPartitionFinalize(), do_autovacuum(), do_compile(), do_setval(), DropObjectById(), DropRole(), enum_cmp_internal(), enum_out(), enum_send(), errdatatype(), eval_const_expressions_mutator(), ExecGrant_Parameter(), ExecInitAgg(), ExecuteCallStmt(), ExecuteDoStmt(), expand_vacuum_rel(), fetch_agg_sort_op(), fetch_fp_info(), fillTypeDesc(), fixup_whole_row_references(), flatten_reloptions(), fmgr_c_validator(), fmgr_info_cxt_security(), fmgr_info_other_lang(), fmgr_internal_validator(), fmgr_security_definer(), fmgr_sql_validator(), fmgr_symbol(), format_operator_extended(), format_operator_parts(), format_procedure_extended(), format_procedure_parts(), format_type_extended(), func_get_detail(), func_parallel(), func_strict(), func_volatile(), FunctionIsVisibleExt(), generate_collation_name(), generate_function_name(), generate_operator_clause(), generate_operator_name(), generate_partition_qual(), generate_qualified_relation_name(), generate_qualified_type_name(), generate_relation_name(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), get_am_name(), get_am_type_oid(), get_array_type(), get_attstatsslot(), get_base_element_type(), get_collation(), get_collation_isdeterministic(), get_collation_name(), get_commutator(), get_constraint_index(), get_constraint_name(), get_constraint_type(), get_database_name(), get_db_info(), get_default_partition_oid(), get_element_type(), get_extension_name(), get_extension_schema(), get_func_leakproof(), get_func_name(), get_func_namespace(), get_func_nargs(), get_func_prokind(), get_func_result_name(), get_func_retset(), get_func_rettype(), get_func_signature(), get_func_support(), get_func_variadictype(), get_function_rows(), get_index_column_opclass(), get_index_isclustered(), get_index_isreplident(), get_index_isvalid(), get_language_name(), get_multirange_range(), get_namespace_name(), get_negator(), get_object_address_defacl(), get_object_address_usermapping(), get_object_namespace(), get_op_rettype(), get_opclass(), get_opclass_family(), get_opclass_input_type(), get_opclass_method(), get_opclass_name(), get_opclass_opfamily_and_input_type(), get_opcode(), get_opname(), get_oprjoin(), get_oprrest(), get_publication_name(), get_qual_for_range(), get_range_collation(), get_range_multirange(), get_range_subtype(), get_rel_name(), get_rel_namespace(), get_rel_persistence(), get_rel_relam(), get_rel_relispartition(), get_rel_relkind(), get_rel_tablespace(), get_rel_type_id(), get_relation_statistics(), get_ri_constraint_root(), get_role_password(), get_rolespec_tuple(), get_subscription_name(), get_tablespace(), get_typ_typrelid(), get_typbyval(), get_typcollation(), get_typdefault(), get_type_category_preferred(), get_type_io_data(), get_typisdefined(), get_typlen(), get_typlenbyval(), get_typlenbyvalalign(), get_typmodin(), get_typstorage(), get_typsubscript(), get_typtype(), getBaseTypeAndTypmod(), GetFdwRoutineByServerId(), GetForeignDataWrapperExtended(), GetForeignServerExtended(), GetForeignServerIdByRelId(), GetForeignTable(), GetIndexAmRoutineByAmId(), getObjectDescription(), getObjectIdentityParts(), GetOperatorFromWellKnownStrategy(), getOpFamilyDescription(), getOpFamilyIdentity(), getProcedureTypeDescription(), GetPublication(), getPublicationSchemaInfo(), getRelationDescription(), getRelationIdentity(), getRelationTypeDescription(), GetSubscription(), GetTSConfigTuple(), getTypeBinaryInputInfo(), getTypeBinaryOutputInfo(), getTypeInputInfo(), getTypeOutputInfo(), GetUserNameFromId(), ginvalidate(), gistvalidate(), has_bypassrls_privilege(), has_createrole_privilege(), has_rolreplication(), has_subclass(), hash_ok_operator(), hashvalidate(), have_createdb_privilege(), heap_drop_with_catalog(), index_concurrently_create_copy(), index_create(), index_drop(), index_get_partition(), indexam_property(), IndexGetRelation(), IndexSupportsBackwardScan(), init_database_collation(), init_sql_fcache(), initialize_peragg(), InitializeSessionUserId(), inline_set_returning_function(), internal_get_result_type(), left_oper(), load_domaintype_info(), load_rangetype_info(), logicalrep_write_tuple(), logicalrep_write_typ(), lookup_ts_config_cache(), lookup_ts_dictionary_cache(), lookup_ts_parser_cache(), lookup_type_cache(), LookupTypeNameExtended(), make_callstmt_target(), make_new_heap(), map_sql_table_to_xmlschema(), map_sql_type_to_xml_name(), nextval_internal(), object_aclmask_ext(), object_ownercheck(), op_hashjoinable(), op_input_types(), op_mergejoinable(), OpClassCacheLookup(), OpclassIsVisibleExt(), oper(), OperatorIsVisibleExt(), OpFamilyCacheLookup(), OpfamilyIsVisibleExt(), ParseFuncOrColumn(), pg_attribute_aclcheck_all_ext(), pg_attribute_aclmask_ext(), pg_basetype(), pg_class_aclmask_ext(), pg_collation_actual_version(), pg_database_collation_actual_version(), pg_get_constraintdef_worker(), pg_get_function_arg_default(), pg_get_function_arguments(), pg_get_function_identity_arguments(), pg_get_function_result(), pg_get_function_sqlbody(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_statisticsobj_worker(), pg_get_statisticsobjdef_expressions(), pg_get_userbyid(), pg_namespace_aclmask_ext(), pg_parameter_acl_aclmask(), pg_parameter_aclmask(), pg_relation_filenode(), pg_relation_filepath(), pg_relation_is_publishable(), pg_sequence_parameters(), pg_type_aclmask_ext(), plperl_validator(), plpgsql_build_datatype(), plpgsql_compile(), plpgsql_parse_cwordtype(), plpgsql_validator(), plpython3_validator(), plsample_func_handler(), plsample_trigger_handler(), PLy_procedure_create(), PLy_procedure_get(), postgres_fdw_get_connections_internal(), prepare_column_cache(), preprocess_aggref(), preprocessNamespacePath(), print_function_arguments(), RangeVarCallbackForAlterRelation(), RangeVarCallbackForAttachIndex(), RangeVarCallbackForDropRelation(), RangeVarCallbackForPolicy(), RangeVarCallbackForRenameAttribute(), RangeVarCallbackForRenameRule(), RangeVarCallbackForRenameTrigger(), RangeVarCallbackForTruncate(), RangeVarCallbackOwnsRelation(), recordExtObjInitPriv(), refresh_by_match_merge(), regclassout(), regcollationout(), regconfigout(), regdictionaryout(), regoperout(), regprocout(), regtypeout(), RelationBuildPartitionDesc(), RelationBuildPartitionKey(), RelationBuildPublicationDesc(), RelationCacheInitializePhase3(), relationHasPrimaryKey(), RelationInitIndexAccessInfo(), RelationInitTableAccessMethod(), RelationIsVisibleExt(), RelationReloadIndexInfo(), RemoveConstraintById(), removeExtObjInitPriv(), RemoveFunctionById(), RemoveOperatorById(), RemovePartitionKeyByRelId(), RemovePublicationById(), RemovePublicationRelById(), RemovePublicationSchemaById(), RemoveRoleFromInitPriv(), RemoveRoleFromObjectPolicy(), RemoveStatisticsById(), RemoveTSConfigurationById(), RemoveTypeById(), rename_constraint_internal(), RenameConstraint(), RenameRole(), replorigin_by_name(), replorigin_by_oid(), replorigin_drop_by_name(), ResetSequence(), ResolveOpClass(), ri_GenerateQualCollation(), ri_LoadConstraintInfo(), roles_is_member_of(), SearchSysCacheLocked1(), sepgsql_proc_setattr(), sepgsql_relation_setattr(), sequence_options(), simplify_function(), spgvalidate(), SPI_gettype(), StatisticsGetRelation(), StatisticsObjIsVisibleExt(), superuser_arg(), transformCallStmt(), transformFkeyCheckAttrs(), transformFkeyGetPrimaryKey(), triggered_change_notification(), tryAttachPartitionForeignKey(), TryReuseForeignKey(), TSConfigIsVisibleExt(), TSDictionaryIsVisibleExt(), TSParserIsVisibleExt(), TSTemplateIsVisibleExt(), TupleDescInitEntry(), typeidType(), typeidTypeRelid(), typeIsOfTypedTable(), TypeIsVisibleExt(), typeOrDomainTypeRelid(), validatePartitionedIndex(), and verify_dictoptions().

◆ SearchSysCache2()

HeapTuple SearchSysCache2 ( int  cacheId,
Datum  key1,
Datum  key2 
)

Definition at line 232 of file syscache.c.

234 {
235  Assert(cacheId >= 0 && cacheId < SysCacheSize &&
236  PointerIsValid(SysCache[cacheId]));
237  Assert(SysCache[cacheId]->cc_nkeys == 2);
238 
239  return SearchCatCache2(SysCache[cacheId], key1, key2);
240 }
HeapTuple SearchCatCache2(CatCache *cache, Datum v1, Datum v2)
Definition: catcache.c:1287

References Assert, PointerIsValid, SearchCatCache2(), and SysCache.

Referenced by AddEnumLabel(), AlterPublicationOptions(), AlterPublicationSchemas(), AlterPublicationTables(), CastCreate(), check_and_fetch_column_list(), check_for_column_name_collision(), convert_column_name(), CreateTransform(), DropSubscription(), enum_in(), enum_recv(), examine_attribute(), ExecGrant_Attribute(), expand_all_col_privileges(), find_coercion_pathway(), find_typmod_coercion_function(), fixup_whole_row_references(), get_attgenerated(), get_attname(), get_attoptions(), get_attr_stat_type(), get_attribute_options(), get_atttype(), get_atttypetypmodcoll(), get_object_address_usermapping(), get_relation_statistics_worker(), get_rewrite_oid(), get_rte_attribute_is_dropped(), get_transform_fromsql(), get_transform_tosql(), GetForeignColumnOptions(), GetSubscriptionRelState(), GetUserMapping(), index_check_primary_key(), index_concurrently_create_copy(), InsertRule(), IsBinaryCoercibleWithCast(), pg_attribute_aclcheck_all_ext(), pg_attribute_aclmask_ext(), pgoutput_row_filter_init(), pub_collist_contains_invalid_column(), pub_rf_contains_invalid_column(), recordExtObjInitPriv(), RelationClearMissing(), removeExtObjInitPriv(), RemoveStatisticsDataById(), SearchSysCacheAttName(), SearchSysCacheAttNum(), statext_dependencies_load(), statext_expressions_load(), statext_mcv_load(), and statext_ndistinct_load().

◆ SearchSysCache3()

HeapTuple SearchSysCache3 ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3 
)

◆ SearchSysCache4()

HeapTuple SearchSysCache4 ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 254 of file syscache.c.

256 {
257  Assert(cacheId >= 0 && cacheId < SysCacheSize &&
258  PointerIsValid(SysCache[cacheId]));
259  Assert(SysCache[cacheId]->cc_nkeys == 4);
260 
261  return SearchCatCache4(SysCache[cacheId], key1, key2, key3, key4);
262 }
HeapTuple SearchCatCache4(CatCache *cache, Datum v1, Datum v2, Datum v3, Datum v4)
Definition: catcache.c:1303

References Assert, PointerIsValid, SearchCatCache4(), and SysCache.

Referenced by get_object_address_opf_member(), get_opfamily_member(), get_opfamily_proc(), inclusion_get_strategy_procinfo(), minmax_get_strategy_procinfo(), minmax_multi_get_strategy_procinfo(), OperatorGet(), and OpernameGetOprid().

◆ SearchSysCacheAttName()

HeapTuple SearchSysCacheAttName ( Oid  relid,
const char *  attname 
)

Definition at line 475 of file syscache.c.

476 {
477  HeapTuple tuple;
478 
479  tuple = SearchSysCache2(ATTNAME,
480  ObjectIdGetDatum(relid),
482  if (!HeapTupleIsValid(tuple))
483  return NULL;
484  if (((Form_pg_attribute) GETSTRUCT(tuple))->attisdropped)
485  {
486  ReleaseSysCache(tuple);
487  return NULL;
488  }
489  return tuple;
490 }
#define GETSTRUCT(TUP)
Definition: htup_details.h:653
NameData attname
Definition: pg_attribute.h:41
FormData_pg_attribute * Form_pg_attribute
Definition: pg_attribute.h:209
static Datum ObjectIdGetDatum(Oid X)
Definition: postgres.h:252
static Datum CStringGetDatum(const char *X)
Definition: postgres.h:350
HeapTuple SearchSysCache2(int cacheId, Datum key1, Datum key2)
Definition: syscache.c:232

References attname, CStringGetDatum(), GETSTRUCT, HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), and SearchSysCache2().

Referenced by ATExecAlterColumnGenericOptions(), ATExecDropColumn(), ATExecSetExpression(), ATExecSetOptions(), ATExecSetStatistics(), ATPrepAddPrimaryKey(), ATPrepAlterColumnType(), ComputeIndexAttrs(), ComputePartitionAttrs(), CreateStatistics(), get_attnum(), make_inh_translation_list(), pg_nextoid(), plpgsql_parse_cwordtype(), SearchSysCacheCopyAttName(), SearchSysCacheExistsAttName(), SetAttrMissing(), and transformColumnNameList().

◆ SearchSysCacheAttNum()

HeapTuple SearchSysCacheAttNum ( Oid  relid,
int16  attnum 
)

Definition at line 538 of file syscache.c.

539 {
540  HeapTuple tuple;
541 
542  tuple = SearchSysCache2(ATTNUM,
543  ObjectIdGetDatum(relid),
545  if (!HeapTupleIsValid(tuple))
546  return NULL;
547  if (((Form_pg_attribute) GETSTRUCT(tuple))->attisdropped)
548  {
549  ReleaseSysCache(tuple);
550  return NULL;
551  }
552  return tuple;
553 }
int16 attnum
Definition: pg_attribute.h:74
static Datum Int16GetDatum(int16 X)
Definition: postgres.h:172

References attnum, GETSTRUCT, HeapTupleIsValid, Int16GetDatum(), ObjectIdGetDatum(), ReleaseSysCache(), and SearchSysCache2().

Referenced by ATExecSetStatistics(), and SearchSysCacheCopyAttNum().

◆ SearchSysCacheCopy()

HeapTuple SearchSysCacheCopy ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 374 of file syscache.c.

379 {
380  HeapTuple tuple,
381  newtuple;
382 
383  tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
384  if (!HeapTupleIsValid(tuple))
385  return tuple;
386  newtuple = heap_copytuple(tuple);
387  ReleaseSysCache(tuple);
388  return newtuple;
389 }
HeapTuple heap_copytuple(HeapTuple tuple)
Definition: heaptuple.c:776

References heap_copytuple(), HeapTupleIsValid, ReleaseSysCache(), and SearchSysCache().

◆ SearchSysCacheCopyAttName()

HeapTuple SearchSysCacheCopyAttName ( Oid  relid,
const char *  attname 
)

Definition at line 498 of file syscache.c.

499 {
500  HeapTuple tuple,
501  newtuple;
502 
503  tuple = SearchSysCacheAttName(relid, attname);
504  if (!HeapTupleIsValid(tuple))
505  return tuple;
506  newtuple = heap_copytuple(tuple);
507  ReleaseSysCache(tuple);
508  return newtuple;
509 }
HeapTuple SearchSysCacheAttName(Oid relid, const char *attname)
Definition: syscache.c:475

References attname, heap_copytuple(), HeapTupleIsValid, ReleaseSysCache(), and SearchSysCacheAttName().

Referenced by ATExecAddColumn(), ATExecAddIdentity(), ATExecAlterColumnType(), ATExecDropColumn(), ATExecDropExpression(), ATExecDropIdentity(), ATExecDropNotNull(), ATExecSetCompression(), ATExecSetIdentity(), ATExecSetStorage(), ATPrepDropExpression(), MergeAttributesIntoExisting(), and renameatt_internal().

◆ SearchSysCacheCopyAttNum()

HeapTuple SearchSysCacheCopyAttNum ( Oid  relid,
int16  attnum 
)

Definition at line 561 of file syscache.c.

562 {
563  HeapTuple tuple,
564  newtuple;
565 
566  tuple = SearchSysCacheAttNum(relid, attnum);
567  if (!HeapTupleIsValid(tuple))
568  return NULL;
569  newtuple = heap_copytuple(tuple);
570  ReleaseSysCache(tuple);
571  return newtuple;
572 }
HeapTuple SearchSysCacheAttNum(Oid relid, int16 attnum)
Definition: syscache.c:538

References attnum, heap_copytuple(), HeapTupleIsValid, ReleaseSysCache(), and SearchSysCacheAttNum().

Referenced by dropconstraint_internal(), pg_get_acl(), set_attnotnull(), and SetIndexStorageProperties().

◆ SearchSysCacheExists()

bool SearchSysCacheExists ( int  cacheId,
Datum  key1,
Datum  key2,
Datum  key3,
Datum  key4 
)

Definition at line 420 of file syscache.c.

425 {
426  HeapTuple tuple;
427 
428  tuple = SearchSysCache(cacheId, key1, key2, key3, key4);
429  if (!HeapTupleIsValid(tuple))
430  return false;
431  ReleaseSysCache(tuple);
432  return true;
433 }

References HeapTupleIsValid, ReleaseSysCache(), and SearchSysCache().

◆ SearchSysCacheExistsAttName()

bool SearchSysCacheExistsAttName ( Oid  relid,
const char *  attname 
)

Definition at line 517 of file syscache.c.

518 {
519  HeapTuple tuple;
520 
521  tuple = SearchSysCacheAttName(relid, attname);
522  if (!HeapTupleIsValid(tuple))
523  return false;
524  ReleaseSysCache(tuple);
525  return true;
526 }

References attname, HeapTupleIsValid, ReleaseSysCache(), and SearchSysCacheAttName().

Referenced by RemoveInheritance().

◆ SearchSysCacheList()

struct catclist* SearchSysCacheList ( int  cacheId,
int  nkeys,
Datum  key1,
Datum  key2,
Datum  key3 
)

Definition at line 673 of file syscache.c.

675 {
676  if (cacheId < 0 || cacheId >= SysCacheSize ||
677  !PointerIsValid(SysCache[cacheId]))
678  elog(ERROR, "invalid cache ID: %d", cacheId);
679 
680  return SearchCatCacheList(SysCache[cacheId], nkeys,
681  key1, key2, key3);
682 }
CatCList * SearchCatCacheList(CatCache *cache, int nkeys, Datum v1, Datum v2, Datum v3)
Definition: catcache.c:1646

References elog, ERROR, catclist::nkeys, PointerIsValid, SearchCatCacheList(), and SysCache.

◆ SearchSysCacheLocked1()

HeapTuple SearchSysCacheLocked1 ( int  cacheId,
Datum  key1 
)

Definition at line 287 of file syscache.c.

289 {
290  ItemPointerData tid;
291  LOCKTAG tag;
292  Oid dboid =
294  Oid reloid = cacheinfo[cacheId].reloid;
295 
296  /*----------
297  * Since inplace updates may happen just before our LockTuple(), we must
298  * return content acquired after LockTuple() of the TID we return. If we
299  * just fetched twice instead of looping, the following sequence would
300  * defeat our locking:
301  *
302  * GRANT: SearchSysCache1() = TID (1,5)
303  * GRANT: LockTuple(pg_class, (1,5))
304  * [no more inplace update of (1,5) until we release the lock]
305  * CLUSTER: SearchSysCache1() = TID (1,5)
306  * CLUSTER: heap_update() = TID (1,8)
307  * CLUSTER: COMMIT
308  * GRANT: SearchSysCache1() = TID (1,8)
309  * GRANT: return (1,8) from SearchSysCacheLocked1()
310  * VACUUM: SearchSysCache1() = TID (1,8)
311  * VACUUM: LockTuple(pg_class, (1,8)) # two TIDs now locked for one rel
312  * VACUUM: inplace update
313  * GRANT: heap_update() = (1,9) # lose inplace update
314  *
315  * In the happy case, this takes two fetches, one to determine the TID to
316  * lock and another to get the content and confirm the TID didn't change.
317  *
318  * This is valid even if the row gets updated to a new TID, the old TID
319  * becomes LP_UNUSED, and the row gets updated back to its old TID. We'd
320  * still hold the right LOCKTAG_TUPLE and a copy of the row captured after
321  * the LOCKTAG_TUPLE.
322  */
323  ItemPointerSetInvalid(&tid);
324  for (;;)
325  {
326  HeapTuple tuple;
327  LOCKMODE lockmode = InplaceUpdateTupleLock;
328 
329  tuple = SearchSysCache1(cacheId, key1);
330  if (ItemPointerIsValid(&tid))
331  {
332  if (!HeapTupleIsValid(tuple))
333  {
334  LockRelease(&tag, lockmode, false);
335  return tuple;
336  }
337  if (ItemPointerEquals(&tid, &tuple->t_self))
338  return tuple;
339  LockRelease(&tag, lockmode, false);
340  }
341  else if (!HeapTupleIsValid(tuple))
342  return tuple;
343 
344  tid = tuple->t_self;
345  ReleaseSysCache(tuple);
346  /* like: LockTuple(rel, &tid, lockmode) */
347  SET_LOCKTAG_TUPLE(tag, dboid, reloid,
350  (void) LockAcquire(&tag, lockmode, false, false);
351 
352  /*
353  * If an inplace update just finished, ensure we process the syscache
354  * inval.
355  *
356  * If a heap_update() call just released its LOCKTAG_TUPLE, we'll
357  * probably find the old tuple and reach "tuple concurrently updated".
358  * If that heap_update() aborts, our LOCKTAG_TUPLE blocks inplace
359  * updates while our caller works.
360  */
362  }
363 }
Oid MyDatabaseId
Definition: globals.c:93
void AcceptInvalidationMessages(void)
Definition: inval.c:863
bool ItemPointerEquals(ItemPointer pointer1, ItemPointer pointer2)
Definition: itemptr.c:35
static void ItemPointerSetInvalid(ItemPointerData *pointer)
Definition: itemptr.h:184
static OffsetNumber ItemPointerGetOffsetNumber(const ItemPointerData *pointer)
Definition: itemptr.h:124
static BlockNumber ItemPointerGetBlockNumber(const ItemPointerData *pointer)
Definition: itemptr.h:103
static bool ItemPointerIsValid(const ItemPointerData *pointer)
Definition: itemptr.h:83
LockAcquireResult LockAcquire(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock, bool dontWait)
Definition: lock.c:803
bool LockRelease(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
Definition: lock.c:2011
#define SET_LOCKTAG_TUPLE(locktag, dboid, reloid, blocknum, offnum)
Definition: lock.h:217
int LOCKMODE
Definition: lockdefs.h:26
#define InplaceUpdateTupleLock
Definition: lockdefs.h:48
ItemPointerData t_self
Definition: htup.h:65
Definition: lock.h:165
bool cc_relisshared
Definition: catcache.h:62
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition: syscache.c:221

References AcceptInvalidationMessages(), catcache::cc_relisshared, HeapTupleIsValid, InplaceUpdateTupleLock, InvalidOid, ItemPointerEquals(), ItemPointerGetBlockNumber(), ItemPointerGetOffsetNumber(), ItemPointerIsValid(), ItemPointerSetInvalid(), LockAcquire(), LockRelease(), MyDatabaseId, ReleaseSysCache(), SearchSysCache1(), SET_LOCKTAG_TUPLE, SysCache, and HeapTupleData::t_self.

Referenced by ATExecSetRelOptions(), ExecGrant_common(), ExecGrant_Relation(), and SearchSysCacheLockedCopy1().

◆ SearchSysCacheLockedCopy1()

HeapTuple SearchSysCacheLockedCopy1 ( int  cacheId,
Datum  key1 
)

Definition at line 399 of file syscache.c.

401 {
402  HeapTuple tuple,
403  newtuple;
404 
405  tuple = SearchSysCacheLocked1(cacheId, key1);
406  if (!HeapTupleIsValid(tuple))
407  return tuple;
408  newtuple = heap_copytuple(tuple);
409  ReleaseSysCache(tuple);
410  return newtuple;
411 }
HeapTuple SearchSysCacheLocked1(int cacheId, Datum key1)
Definition: syscache.c:287

References heap_copytuple(), HeapTupleIsValid, ReleaseSysCache(), and SearchSysCacheLocked1().

Referenced by AlterRelationNamespaceInternal(), RelationSetNewRelfilenumber(), RenameDatabase(), RenameRelationInternal(), SetDatabaseHasLoginEventTriggers(), SetRelationTableSpace(), and update_relispartition().

◆ SysCacheGetAttr()

Datum SysCacheGetAttr ( int  cacheId,
HeapTuple  tup,
AttrNumber  attributeNumber,
bool isNull 
)

Definition at line 595 of file syscache.c.

598 {
599  /*
600  * We just need to get the TupleDesc out of the cache entry, and then we
601  * can apply heap_getattr(). Normally the cache control data is already
602  * valid (because the caller recently fetched the tuple via this same
603  * cache), but there are cases where we have to initialize the cache here.
604  */
605  if (cacheId < 0 || cacheId >= SysCacheSize ||
606  !PointerIsValid(SysCache[cacheId]))
607  elog(ERROR, "invalid cache ID: %d", cacheId);
608  if (!PointerIsValid(SysCache[cacheId]->cc_tupdesc))
609  {
610  InitCatCachePhase2(SysCache[cacheId], false);
611  Assert(PointerIsValid(SysCache[cacheId]->cc_tupdesc));
612  }
613 
614  return heap_getattr(tup, attributeNumber,
615  SysCache[cacheId]->cc_tupdesc,
616  isNull);
617 }

References Assert, elog, ERROR, heap_getattr(), InitCatCachePhase2(), PointerIsValid, and SysCache.

Referenced by AlterCollation(), AlterForeignDataWrapper(), AlterForeignServer(), AlterFunction(), AlterPublicationTables(), AlterRole(), AlterSchemaOwner_internal(), AlterTSDictionary(), AlterUserMapping(), ATExecAlterColumnGenericOptions(), ATExecChangeOwner(), ATExecGenericOptions(), ATExecSetOptions(), ATExecSetRelOptions(), build_function_result_tupdesc_t(), check_and_fetch_column_list(), CheckMyDatabase(), compile_plperl_function(), create_pg_locale(), DeconstructFkConstraintRow(), DefineCollation(), DefineDomain(), DropSubscription(), examine_attribute(), ExecGrant_Attribute(), ExecGrant_common(), ExecGrant_Parameter(), ExecGrant_Relation(), ExecInitAgg(), expand_function_arguments(), fetch_statentries_for_relation(), flatten_reloptions(), fmgr_security_definer(), fmgr_sql_validator(), FuncnameGetCandidates(), generate_partition_qual(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), get_attoptions(), get_attribute_options(), get_db_info(), get_default_acl_internal(), get_func_arg_info(), get_func_trftypes(), get_relation_statistics(), get_role_password(), get_tablespace(), get_typdefault(), GetForeignColumnOptions(), GetForeignDataWrapperExtended(), GetForeignServerExtended(), GetForeignTable(), GetSubscription(), GetSubscriptionRelations(), GetSubscriptionRelState(), GetUserMapping(), index_concurrently_create_copy(), init_database_collation(), init_sql_fcache(), initialize_peragg(), inline_function(), inline_set_returning_function(), lookup_ts_dictionary_cache(), make_new_heap(), MatchNamedCall(), object_aclmask_ext(), pg_attribute_aclcheck_all_ext(), pg_attribute_aclmask_ext(), pg_class_aclmask_ext(), pg_get_acl(), pg_get_constraintdef_worker(), pg_get_function_arg_default(), pg_get_function_sqlbody(), pg_get_functiondef(), pg_get_publication_tables(), pg_namespace_aclmask_ext(), pg_parameter_acl_aclmask(), pg_parameter_aclmask(), pg_type_aclmask_ext(), pgoutput_row_filter_init(), plsample_func_handler(), plsample_trigger_handler(), PLy_procedure_create(), prepare_sql_fn_parse_info(), preprocess_aggref(), print_function_arguments(), ProcedureCreate(), pub_collist_contains_invalid_column(), pub_rf_contains_invalid_column(), recordExtObjInitPriv(), RelationBuildPartitionDesc(), RelationBuildPartitionKey(), SetDefaultACL(), statext_dependencies_load(), statext_expressions_load(), statext_mcv_load(), statext_ndistinct_load(), StorePartitionBound(), SysCacheGetAttrNotNull(), and transformCallStmt().

◆ SysCacheGetAttrNotNull()

Datum SysCacheGetAttrNotNull ( int  cacheId,
HeapTuple  tup,
AttrNumber  attributeNumber 
)

Definition at line 626 of file syscache.c.

628 {
629  bool isnull;
630  Datum attr;
631 
632  attr = SysCacheGetAttr(cacheId, tup, attributeNumber, &isnull);
633 
634  if (isnull)
635  {
636  elog(ERROR,
637  "unexpected null value in cached tuple for catalog %s column %s",
638  get_rel_name(cacheinfo[cacheId].reloid),
639  NameStr(TupleDescAttr(SysCache[cacheId]->cc_tupdesc, attributeNumber - 1)->attname));
640  }
641 
642  return attr;
643 }
#define NameStr(name)
Definition: c.h:751
char * get_rel_name(Oid relid)
Definition: lsyscache.c:1928
uintptr_t Datum
Definition: postgres.h:64
Datum SysCacheGetAttr(int cacheId, HeapTuple tup, AttrNumber attributeNumber, bool *isNull)
Definition: syscache.c:595
#define TupleDescAttr(tupdesc, i)
Definition: tupdesc.h:92

References attname, elog, ERROR, get_rel_name(), NameStr, SysCache, SysCacheGetAttr(), and TupleDescAttr.

Referenced by AlterCollation(), AlterDomainValidateConstraint(), ATExecValidateConstraint(), build_function_result_tupdesc_t(), build_replindex_scan_key(), CheckIndexCompatible(), CheckMyDatabase(), compile_plperl_function(), compile_pltcl_function(), create_pg_locale(), DeconstructFkConstraintRow(), do_compile(), DropSubscription(), ExecGrant_common(), ExecGrant_Parameter(), extractNotNullColumn(), fetch_function_defaults(), fetch_statentries_for_relation(), fmgr_c_validator(), fmgr_info_C_lang(), fmgr_info_cxt_security(), fmgr_internal_validator(), fmgr_sql_validator(), fmgr_symbol(), func_get_detail(), generateClonedExtStatsStmt(), generateClonedIndexStmt(), get_attstatsslot(), get_db_info(), get_func_result_name(), get_index_column_opclass(), get_object_namespace(), get_qual_for_range(), getObjectDescription(), getObjectIdentityParts(), GetSubscription(), inclusion_get_strategy_procinfo(), index_concurrently_create_copy(), index_opclass_options(), init_database_collation(), init_sql_fcache(), inline_function(), inline_set_returning_function(), minmax_get_strategy_procinfo(), minmax_multi_get_strategy_procinfo(), object_aclmask_ext(), object_ownercheck(), pg_collation_actual_version(), pg_database_collation_actual_version(), pg_get_constraintdef_worker(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_partkeydef_worker(), pg_get_statisticsobj_worker(), pg_get_statisticsobjdef_expressions(), PLy_procedure_create(), print_function_sqlbody(), ProcedureCreate(), refresh_by_match_merge(), RelationBuildPartitionKey(), RemoveRoleFromInitPriv(), test_indoption(), transformFkeyCheckAttrs(), transformFkeyGetPrimaryKey(), transformIndexConstraint(), and TryReuseForeignKey().

◆ SysCacheInvalidate()

void SysCacheInvalidate ( int  cacheId,
uint32  hashValue 
)

Definition at line 693 of file syscache.c.

694 {
695  if (cacheId < 0 || cacheId >= SysCacheSize)
696  elog(ERROR, "invalid cache ID: %d", cacheId);
697 
698  /* if this cache isn't initialized yet, no need to do anything */
699  if (!PointerIsValid(SysCache[cacheId]))
700  return;
701 
702  CatCacheInvalidate(SysCache[cacheId], hashValue);
703 }
void CatCacheInvalidate(CatCache *cache, uint32 hashValue)
Definition: catcache.c:607

References CatCacheInvalidate(), elog, ERROR, PointerIsValid, and SysCache.

Referenced by LocalExecuteInvalidationMessage().