aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/cache/syscache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/cache/syscache.c')
-rw-r--r--src/backend/utils/cache/syscache.c632
1 files changed, 15 insertions, 617 deletions
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index c10a7b3d0d2..162855b1587 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -22,59 +22,13 @@
#include "access/htup_details.h"
#include "access/sysattr.h"
-#include "catalog/pg_aggregate.h"
-#include "catalog/pg_am.h"
-#include "catalog/pg_amop.h"
-#include "catalog/pg_amproc.h"
-#include "catalog/pg_auth_members.h"
-#include "catalog/pg_authid.h"
-#include "catalog/pg_cast.h"
-#include "catalog/pg_collation.h"
-#include "catalog/pg_constraint.h"
-#include "catalog/pg_conversion.h"
-#include "catalog/pg_database.h"
-#include "catalog/pg_db_role_setting.h"
-#include "catalog/pg_default_acl.h"
-#include "catalog/pg_depend.h"
-#include "catalog/pg_description.h"
-#include "catalog/pg_enum.h"
-#include "catalog/pg_event_trigger.h"
-#include "catalog/pg_foreign_data_wrapper.h"
-#include "catalog/pg_foreign_server.h"
-#include "catalog/pg_foreign_table.h"
-#include "catalog/pg_language.h"
-#include "catalog/pg_namespace.h"
-#include "catalog/pg_opclass.h"
-#include "catalog/pg_operator.h"
-#include "catalog/pg_opfamily.h"
-#include "catalog/pg_parameter_acl.h"
-#include "catalog/pg_partitioned_table.h"
-#include "catalog/pg_proc.h"
-#include "catalog/pg_publication.h"
-#include "catalog/pg_publication_namespace.h"
-#include "catalog/pg_publication_rel.h"
-#include "catalog/pg_range.h"
-#include "catalog/pg_replication_origin.h"
-#include "catalog/pg_rewrite.h"
-#include "catalog/pg_seclabel.h"
-#include "catalog/pg_sequence.h"
-#include "catalog/pg_shdepend.h"
-#include "catalog/pg_shdescription.h"
-#include "catalog/pg_shseclabel.h"
-#include "catalog/pg_statistic.h"
-#include "catalog/pg_statistic_ext.h"
-#include "catalog/pg_statistic_ext_data.h"
-#include "catalog/pg_subscription.h"
-#include "catalog/pg_subscription_rel.h"
-#include "catalog/pg_tablespace.h"
-#include "catalog/pg_transform.h"
-#include "catalog/pg_ts_config.h"
-#include "catalog/pg_ts_config_map.h"
-#include "catalog/pg_ts_dict.h"
-#include "catalog/pg_ts_parser.h"
-#include "catalog/pg_ts_template.h"
-#include "catalog/pg_type.h"
-#include "catalog/pg_user_mapping.h"
+#include "catalog/pg_db_role_setting_d.h"
+#include "catalog/pg_depend_d.h"
+#include "catalog/pg_description_d.h"
+#include "catalog/pg_seclabel_d.h"
+#include "catalog/pg_shdepend_d.h"
+#include "catalog/pg_shdescription_d.h"
+#include "catalog/pg_shseclabel_d.h"
#include "lib/qunique.h"
#include "utils/catcache.h"
#include "utils/lsyscache.h"
@@ -85,18 +39,6 @@
Adding system caches:
- Add your new cache to the list in include/utils/syscache.h.
- Keep the list sorted alphabetically.
-
- Add your entry to the cacheinfo[] array below. All cache lists are
- alphabetical, so add it in the proper place. Specify the relation OID,
- index OID, number of keys, key attribute numbers, and initial number of
- hash buckets.
-
- The number of hash buckets must be a power of 2. It's reasonable to
- set this to the number of entries that might be in the particular cache
- in a medium-size database.
-
There must be a unique index underlying each syscache (ie, an index
whose key is the same as that of the cache). If there is not one
already, add the definition for it to include/catalog/pg_*.h using
@@ -104,6 +46,13 @@
(Adding an index requires a catversion.h update, while simply
adding/deleting caches only requires a recompile.)
+ Add a MAKE_SYSCACHE call to the same pg_*.h file specifying the name of
+ your cache, the underlying index, and the initial number of hash buckets.
+
+ The number of hash buckets must be a power of 2. It's reasonable to
+ set this to the number of entries that might be in the particular cache
+ in a medium-size database.
+
Finally, any place your relation gets heap_insert() or
heap_update() calls, use CatalogTupleInsert() or CatalogTupleUpdate()
instead, which also update indexes. The heap_* calls do not do that.
@@ -126,558 +75,7 @@ struct cachedesc
/* Macro to provide nkeys and key array with convenient syntax. */
#define KEY(...) VA_ARGS_NARGS(__VA_ARGS__), { __VA_ARGS__ }
-static const struct cachedesc cacheinfo[] = {
- [AGGFNOID] = {
- AggregateRelationId,
- AggregateFnoidIndexId,
- KEY(Anum_pg_aggregate_aggfnoid),
- 16
- },
- [AMNAME] = {
- AccessMethodRelationId,
- AmNameIndexId,
- KEY(Anum_pg_am_amname),
- 4
- },
- [AMOID] = {
- AccessMethodRelationId,
- AmOidIndexId,
- KEY(Anum_pg_am_oid),
- 4
- },
- [AMOPOPID] = {
- AccessMethodOperatorRelationId,
- AccessMethodOperatorIndexId,
- KEY(Anum_pg_amop_amopopr,
- Anum_pg_amop_amoppurpose,
- Anum_pg_amop_amopfamily),
- 64
- },
- [AMOPSTRATEGY] = {
- AccessMethodOperatorRelationId,
- AccessMethodStrategyIndexId,
- KEY(Anum_pg_amop_amopfamily,
- Anum_pg_amop_amoplefttype,
- Anum_pg_amop_amoprighttype,
- Anum_pg_amop_amopstrategy),
- 64
- },
- [AMPROCNUM] = {
- AccessMethodProcedureRelationId,
- AccessMethodProcedureIndexId,
- KEY(Anum_pg_amproc_amprocfamily,
- Anum_pg_amproc_amproclefttype,
- Anum_pg_amproc_amprocrighttype,
- Anum_pg_amproc_amprocnum),
- 16
- },
- [ATTNAME] = {
- AttributeRelationId,
- AttributeRelidNameIndexId,
- KEY(Anum_pg_attribute_attrelid,
- Anum_pg_attribute_attname),
- 32
- },
- [ATTNUM] = {
- AttributeRelationId,
- AttributeRelidNumIndexId,
- KEY(Anum_pg_attribute_attrelid,
- Anum_pg_attribute_attnum),
- 128
- },
- [AUTHMEMMEMROLE] = {
- AuthMemRelationId,
- AuthMemMemRoleIndexId,
- KEY(Anum_pg_auth_members_member,
- Anum_pg_auth_members_roleid,
- Anum_pg_auth_members_grantor),
- 8
- },
- [AUTHMEMROLEMEM] = {
- AuthMemRelationId,
- AuthMemRoleMemIndexId,
- KEY(Anum_pg_auth_members_roleid,
- Anum_pg_auth_members_member,
- Anum_pg_auth_members_grantor),
- 8
- },
- [AUTHNAME] = {
- AuthIdRelationId,
- AuthIdRolnameIndexId,
- KEY(Anum_pg_authid_rolname),
- 8
- },
- [AUTHOID] = {
- AuthIdRelationId,
- AuthIdOidIndexId,
- KEY(Anum_pg_authid_oid),
- 8
- },
- [CASTSOURCETARGET] = {
- CastRelationId,
- CastSourceTargetIndexId,
- KEY(Anum_pg_cast_castsource,
- Anum_pg_cast_casttarget),
- 256
- },
- [CLAAMNAMENSP] = {
- OperatorClassRelationId,
- OpclassAmNameNspIndexId,
- KEY(Anum_pg_opclass_opcmethod,
- Anum_pg_opclass_opcname,
- Anum_pg_opclass_opcnamespace),
- 8
- },
- [CLAOID] = {
- OperatorClassRelationId,
- OpclassOidIndexId,
- KEY(Anum_pg_opclass_oid),
- 8
- },
- [COLLNAMEENCNSP] = {
- CollationRelationId,
- CollationNameEncNspIndexId,
- KEY(Anum_pg_collation_collname,
- Anum_pg_collation_collencoding,
- Anum_pg_collation_collnamespace),
- 8
- },
- [COLLOID] = {
- CollationRelationId,
- CollationOidIndexId,
- KEY(Anum_pg_collation_oid),
- 8
- },
- [CONDEFAULT] = {
- ConversionRelationId,
- ConversionDefaultIndexId,
- KEY(Anum_pg_conversion_connamespace,
- Anum_pg_conversion_conforencoding,
- Anum_pg_conversion_contoencoding,
- Anum_pg_conversion_oid),
- 8
- },
- [CONNAMENSP] = {
- ConversionRelationId,
- ConversionNameNspIndexId,
- KEY(Anum_pg_conversion_conname,
- Anum_pg_conversion_connamespace),
- 8
- },
- [CONSTROID] = {
- ConstraintRelationId,
- ConstraintOidIndexId,
- KEY(Anum_pg_constraint_oid),
- 16
- },
- [CONVOID] = {
- ConversionRelationId,
- ConversionOidIndexId,
- KEY(Anum_pg_conversion_oid),
- 8
- },
- [DATABASEOID] = {
- DatabaseRelationId,
- DatabaseOidIndexId,
- KEY(Anum_pg_database_oid),
- 4
- },
- [DEFACLROLENSPOBJ] = {
- DefaultAclRelationId,
- DefaultAclRoleNspObjIndexId,
- KEY(Anum_pg_default_acl_defaclrole,
- Anum_pg_default_acl_defaclnamespace,
- Anum_pg_default_acl_defaclobjtype),
- 8
- },
- [ENUMOID] = {
- EnumRelationId,
- EnumOidIndexId,
- KEY(Anum_pg_enum_oid),
- 8
- },
- [ENUMTYPOIDNAME] = {
- EnumRelationId,
- EnumTypIdLabelIndexId,
- KEY(Anum_pg_enum_enumtypid,
- Anum_pg_enum_enumlabel),
- 8
- },
- [EVENTTRIGGERNAME] = {
- EventTriggerRelationId,
- EventTriggerNameIndexId,
- KEY(Anum_pg_event_trigger_evtname),
- 8
- },
- [EVENTTRIGGEROID] = {
- EventTriggerRelationId,
- EventTriggerOidIndexId,
- KEY(Anum_pg_event_trigger_oid),
- 8
- },
- [FOREIGNDATAWRAPPERNAME] = {
- ForeignDataWrapperRelationId,
- ForeignDataWrapperNameIndexId,
- KEY(Anum_pg_foreign_data_wrapper_fdwname),
- 2
- },
- [FOREIGNDATAWRAPPEROID] = {
- ForeignDataWrapperRelationId,
- ForeignDataWrapperOidIndexId,
- KEY(Anum_pg_foreign_data_wrapper_oid),
- 2
- },
- [FOREIGNSERVERNAME] = {
- ForeignServerRelationId,
- ForeignServerNameIndexId,
- KEY(Anum_pg_foreign_server_srvname),
- 2
- },
- [FOREIGNSERVEROID] = {
- ForeignServerRelationId,
- ForeignServerOidIndexId,
- KEY(Anum_pg_foreign_server_oid),
- 2
- },
- [FOREIGNTABLEREL] = {
- ForeignTableRelationId,
- ForeignTableRelidIndexId,
- KEY(Anum_pg_foreign_table_ftrelid),
- 4
- },
- [INDEXRELID] = {
- IndexRelationId,
- IndexRelidIndexId,
- KEY(Anum_pg_index_indexrelid),
- 64
- },
- [LANGNAME] = {
- LanguageRelationId,
- LanguageNameIndexId,
- KEY(Anum_pg_language_lanname),
- 4
- },
- [LANGOID] = {
- LanguageRelationId,
- LanguageOidIndexId,
- KEY(Anum_pg_language_oid),
- 4
- },
- [NAMESPACENAME] = {
- NamespaceRelationId,
- NamespaceNameIndexId,
- KEY(Anum_pg_namespace_nspname),
- 4
- },
- [NAMESPACEOID] = {
- NamespaceRelationId,
- NamespaceOidIndexId,
- KEY(Anum_pg_namespace_oid),
- 16
- },
- [OPERNAMENSP] = {
- OperatorRelationId,
- OperatorNameNspIndexId,
- KEY(Anum_pg_operator_oprname,
- Anum_pg_operator_oprleft,
- Anum_pg_operator_oprright,
- Anum_pg_operator_oprnamespace),
- 256
- },
- [OPEROID] = {
- OperatorRelationId,
- OperatorOidIndexId,
- KEY(Anum_pg_operator_oid),
- 32
- },
- [OPFAMILYAMNAMENSP] = {
- OperatorFamilyRelationId,
- OpfamilyAmNameNspIndexId,
- KEY(Anum_pg_opfamily_opfmethod,
- Anum_pg_opfamily_opfname,
- Anum_pg_opfamily_opfnamespace),
- 8
- },
- [OPFAMILYOID] = {
- OperatorFamilyRelationId,
- OpfamilyOidIndexId,
- KEY(Anum_pg_opfamily_oid),
- 8
- },
- [PARAMETERACLNAME] = {
- ParameterAclRelationId,
- ParameterAclParnameIndexId,
- KEY(Anum_pg_parameter_acl_parname),
- 4
- },
- [PARAMETERACLOID] = {
- ParameterAclRelationId,
- ParameterAclOidIndexId,
- KEY(Anum_pg_parameter_acl_oid),
- 4
- },
- [PARTRELID] = {
- PartitionedRelationId,
- PartitionedRelidIndexId,
- KEY(Anum_pg_partitioned_table_partrelid),
- 32
- },
- [PROCNAMEARGSNSP] = {
- ProcedureRelationId,
- ProcedureNameArgsNspIndexId,
- KEY(Anum_pg_proc_proname,
- Anum_pg_proc_proargtypes,
- Anum_pg_proc_pronamespace),
- 128
- },
- [PROCOID] = {
- ProcedureRelationId,
- ProcedureOidIndexId,
- KEY(Anum_pg_proc_oid),
- 128
- },
- [PUBLICATIONNAME] = {
- PublicationRelationId,
- PublicationNameIndexId,
- KEY(Anum_pg_publication_pubname),
- 8
- },
- [PUBLICATIONNAMESPACE] = {
- PublicationNamespaceRelationId,
- PublicationNamespaceObjectIndexId,
- KEY(Anum_pg_publication_namespace_oid),
- 64
- },
- [PUBLICATIONNAMESPACEMAP] = {
- PublicationNamespaceRelationId,
- PublicationNamespacePnnspidPnpubidIndexId,
- KEY(Anum_pg_publication_namespace_pnnspid,
- Anum_pg_publication_namespace_pnpubid),
- 64
- },
- [PUBLICATIONOID] = {
- PublicationRelationId,
- PublicationObjectIndexId,
- KEY(Anum_pg_publication_oid),
- 8
- },
- [PUBLICATIONREL] = {
- PublicationRelRelationId,
- PublicationRelObjectIndexId,
- KEY(Anum_pg_publication_rel_oid),
- 64
- },
- [PUBLICATIONRELMAP] = {
- PublicationRelRelationId,
- PublicationRelPrrelidPrpubidIndexId,
- KEY(Anum_pg_publication_rel_prrelid,
- Anum_pg_publication_rel_prpubid),
- 64
- },
- [RANGEMULTIRANGE] = {
- RangeRelationId,
- RangeMultirangeTypidIndexId,
- KEY(Anum_pg_range_rngmultitypid),
- 4
- },
- [RANGETYPE] = {
- RangeRelationId,
- RangeTypidIndexId,
- KEY(Anum_pg_range_rngtypid),
- 4
- },
- [RELNAMENSP] = {
- RelationRelationId,
- ClassNameNspIndexId,
- KEY(Anum_pg_class_relname,
- Anum_pg_class_relnamespace),
- 128
- },
- [RELOID] = {
- RelationRelationId,
- ClassOidIndexId,
- KEY(Anum_pg_class_oid),
- 128
- },
- [REPLORIGIDENT] = {
- ReplicationOriginRelationId,
- ReplicationOriginIdentIndex,
- KEY(Anum_pg_replication_origin_roident),
- 16
- },
- [REPLORIGNAME] = {
- ReplicationOriginRelationId,
- ReplicationOriginNameIndex,
- KEY(Anum_pg_replication_origin_roname),
- 16
- },
- [RULERELNAME] = {
- RewriteRelationId,
- RewriteRelRulenameIndexId,
- KEY(Anum_pg_rewrite_ev_class,
- Anum_pg_rewrite_rulename),
- 8
- },
- [SEQRELID] = {
- SequenceRelationId,
- SequenceRelidIndexId,
- KEY(Anum_pg_sequence_seqrelid),
- 32
- },
- [STATEXTDATASTXOID] = {
- StatisticExtDataRelationId,
- StatisticExtDataStxoidInhIndexId,
- KEY(Anum_pg_statistic_ext_data_stxoid,
- Anum_pg_statistic_ext_data_stxdinherit),
- 4
- },
- [STATEXTNAMENSP] = {
- StatisticExtRelationId,
- StatisticExtNameIndexId,
- KEY(Anum_pg_statistic_ext_stxname,
- Anum_pg_statistic_ext_stxnamespace),
- 4
- },
- [STATEXTOID] = {
- StatisticExtRelationId,
- StatisticExtOidIndexId,
- KEY(Anum_pg_statistic_ext_oid),
- 4
- },
- [STATRELATTINH] = {
- StatisticRelationId,
- StatisticRelidAttnumInhIndexId,
- KEY(Anum_pg_statistic_starelid,
- Anum_pg_statistic_staattnum,
- Anum_pg_statistic_stainherit),
- 128
- },
- [SUBSCRIPTIONNAME] = {
- SubscriptionRelationId,
- SubscriptionNameIndexId,
- KEY(Anum_pg_subscription_subdbid,
- Anum_pg_subscription_subname),
- 4
- },
- [SUBSCRIPTIONOID] = {
- SubscriptionRelationId,
- SubscriptionObjectIndexId,
- KEY(Anum_pg_subscription_oid),
- 4
- },
- [SUBSCRIPTIONRELMAP] = {
- SubscriptionRelRelationId,
- SubscriptionRelSrrelidSrsubidIndexId,
- KEY(Anum_pg_subscription_rel_srrelid,
- Anum_pg_subscription_rel_srsubid),
- 64
- },
- [TABLESPACEOID] = {
- TableSpaceRelationId,
- TablespaceOidIndexId,
- KEY(Anum_pg_tablespace_oid),
- 4
- },
- [TRFOID] = {
- TransformRelationId,
- TransformOidIndexId,
- KEY(Anum_pg_transform_oid),
- 16
- },
- [TRFTYPELANG] = {
- TransformRelationId,
- TransformTypeLangIndexId,
- KEY(Anum_pg_transform_trftype,
- Anum_pg_transform_trflang),
- 16
- },
- [TSCONFIGMAP] = {
- TSConfigMapRelationId,
- TSConfigMapIndexId,
- KEY(Anum_pg_ts_config_map_mapcfg,
- Anum_pg_ts_config_map_maptokentype,
- Anum_pg_ts_config_map_mapseqno),
- 2
- },
- [TSCONFIGNAMENSP] = {
- TSConfigRelationId,
- TSConfigNameNspIndexId,
- KEY(Anum_pg_ts_config_cfgname,
- Anum_pg_ts_config_cfgnamespace),
- 2
- },
- [TSCONFIGOID] = {
- TSConfigRelationId,
- TSConfigOidIndexId,
- KEY(Anum_pg_ts_config_oid),
- 2
- },
- [TSDICTNAMENSP] = {
- TSDictionaryRelationId,
- TSDictionaryNameNspIndexId,
- KEY(Anum_pg_ts_dict_dictname,
- Anum_pg_ts_dict_dictnamespace),
- 2
- },
- [TSDICTOID] = {
- TSDictionaryRelationId,
- TSDictionaryOidIndexId,
- KEY(Anum_pg_ts_dict_oid),
- 2
- },
- [TSPARSERNAMENSP] = {
- TSParserRelationId,
- TSParserNameNspIndexId,
- KEY(Anum_pg_ts_parser_prsname,
- Anum_pg_ts_parser_prsnamespace),
- 2
- },
- [TSPARSEROID] = {
- TSParserRelationId,
- TSParserOidIndexId,
- KEY(Anum_pg_ts_parser_oid),
- 2
- },
- [TSTEMPLATENAMENSP] = {
- TSTemplateRelationId,
- TSTemplateNameNspIndexId,
- KEY(Anum_pg_ts_template_tmplname,
- Anum_pg_ts_template_tmplnamespace),
- 2
- },
- [TSTEMPLATEOID] = {
- TSTemplateRelationId,
- TSTemplateOidIndexId,
- KEY(Anum_pg_ts_template_oid),
- 2
- },
- [TYPENAMENSP] = {
- TypeRelationId,
- TypeNameNspIndexId,
- KEY(Anum_pg_type_typname,
- Anum_pg_type_typnamespace),
- 64
- },
- [TYPEOID] = {
- TypeRelationId,
- TypeOidIndexId,
- KEY(Anum_pg_type_oid),
- 64
- },
- [USERMAPPINGOID] = {
- UserMappingRelationId,
- UserMappingOidIndexId,
- KEY(Anum_pg_user_mapping_oid),
- 2
- },
- [USERMAPPINGUSERSERVER] = {
- UserMappingRelationId,
- UserMappingUserServerIndexId,
- KEY(Anum_pg_user_mapping_umuser,
- Anum_pg_user_mapping_umserver),
- 2
- }
-};
+#include "catalog/syscache_info.h"
StaticAssertDecl(lengthof(cacheinfo) == SysCacheSize,
"SysCacheSize does not match syscache.c's array");