aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/cache/syscache.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2024-01-23 07:13:38 +0100
committerPeter Eisentraut <peter@eisentraut.org>2024-01-23 07:31:06 +0100
commit9b1a6f50b91dca6610932650c8c81a3c924259f9 (patch)
treec383bb9464842ad3f8b43af82b1da98afd134895 /src/backend/utils/cache/syscache.c
parent46d8587b504170ca14f064890bc7ccbbd7523f81 (diff)
downloadpostgresql-9b1a6f50b91dca6610932650c8c81a3c924259f9.tar.gz
postgresql-9b1a6f50b91dca6610932650c8c81a3c924259f9.zip
Generate syscache info from catalog files
Add a new genbki macros MAKE_SYSCACHE that specifies the syscache ID macro, the underlying index, and the number of buckets. From that, we can generate the existing tables in syscache.h and syscache.c via genbki.pl. Reviewed-by: John Naylor <johncnaylorls@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/75ae5875-3abc-dafc-8aec-73247ed41cde@eisentraut.org
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");