Add TOAST table to pg_index.
authorNathan Bossart <[email protected]>
Wed, 18 Sep 2024 19:42:57 +0000 (14:42 -0500)
committerNathan Bossart <[email protected]>
Wed, 18 Sep 2024 19:42:57 +0000 (14:42 -0500)
This change allows pg_index rows to use out-of-line storage for the
"indexprs" and "indpred" columns, which enables use-cases such as
very large index expressions.

This system catalog was previously not given a TOAST table due to a
fear of circularity issues (see commit 96cdeae07f).  Testing has
not revealed any such problems, and it seems unlikely that the
entries for system indexes could ever need out-of-line storage.  In
any case, it is still early in the v18 development cycle, so
committing this now will hopefully increase the chances of finding
any unexpected problems prior to release.

Bumps catversion.

Reported-by: Jonathan Katz
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/b611015f-b423-458c-aa2d-be0e655cc1b4%40postgresql.org

src/include/catalog/catversion.h
src/include/catalog/pg_index.h
src/test/regress/expected/misc_sanity.out
src/test/regress/sql/misc_sanity.sql

index 1d54ef6edceff92991516b0a789b6985fc0097ab..2d0b36eaab5a1a8f95fb566e16f26c5dd4e7f196 100644 (file)
@@ -57,6 +57,6 @@
  */
 
 /*                         yyyymmddN */
-#define CATALOG_VERSION_NO 202409181
+#define CATALOG_VERSION_NO 202409182
 
 #endif
index 3462572eb55bbcfb9a6c4fad8d37c50322a4f519..6c89639a9e4f3ee4689126ccc702bfae9e2b9cc0 100644 (file)
@@ -69,6 +69,8 @@ CATALOG(pg_index,2610,IndexRelationId) BKI_SCHEMA_MACRO
  */
 typedef FormData_pg_index *Form_pg_index;
 
+DECLARE_TOAST_WITH_MACRO(pg_index, 8149, 8150, PgIndexToastTable, PgIndexToastIndex);
+
 DECLARE_INDEX(pg_index_indrelid_index, 2678, IndexIndrelidIndexId, pg_index, btree(indrelid oid_ops));
 DECLARE_UNIQUE_INDEX_PKEY(pg_index_indexrelid_index, 2679, IndexRelidIndexId, pg_index, btree(indexrelid oid_ops));
 
index ad88cbd5c4c07823ab61dfb65ab58cc30dd39eab..45e74928775bd64a30127faca095637d22b11016 100644 (file)
@@ -35,8 +35,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR
 -- Look for system tables with varlena columns but no toast table. All
 -- system tables with toastable columns should have toast tables, with
 -- the following exceptions:
--- 1. pg_class, pg_attribute, and pg_index, due to fear of recursive
--- dependencies as toast tables depend on them.
+-- 1. pg_class and pg_attribute, due to fear of recursive dependencies as
+-- toast tables depend on them.
 -- 2. pg_largeobject and pg_largeobject_metadata.  Large object catalogs
 -- and toast tables are mutually exclusive and large object data is handled
 -- as user data by pg_upgrade, which would cause failures.
@@ -56,11 +56,9 @@ ORDER BY 1, 2;
  pg_class                | relacl        | aclitem[]
  pg_class                | reloptions    | text[]
  pg_class                | relpartbound  | pg_node_tree
- pg_index                | indexprs      | pg_node_tree
- pg_index                | indpred       | pg_node_tree
  pg_largeobject          | data          | bytea
  pg_largeobject_metadata | lomacl        | aclitem[]
-(11 rows)
+(9 rows)
 
 -- system catalogs without primary keys
 --
index cda760bd5ef9952fa2a7a8b7792e417a7c695c55..16f3a7c0c19e7ddb7c830cd3c5d00ab4243775f2 100644 (file)
@@ -38,8 +38,8 @@ WHERE refclassid = 0 OR refobjid = 0 OR
 -- Look for system tables with varlena columns but no toast table. All
 -- system tables with toastable columns should have toast tables, with
 -- the following exceptions:
--- 1. pg_class, pg_attribute, and pg_index, due to fear of recursive
--- dependencies as toast tables depend on them.
+-- 1. pg_class and pg_attribute, due to fear of recursive dependencies as
+-- toast tables depend on them.
 -- 2. pg_largeobject and pg_largeobject_metadata.  Large object catalogs
 -- and toast tables are mutually exclusive and large object data is handled
 -- as user data by pg_upgrade, which would cause failures.