diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out
index 460bef3037..cd10c34960 100644
--- a/contrib/pageinspect/expected/gist.out
+++ b/contrib/pageinspect/expected/gist.out
@@ -107,4 +107,180 @@ SELECT gist_page_opaque_info(decode(repeat('00', :block_size), 'hex'));
  
 (1 row)
 
+-- Test gist_page_items with pages of an index containing non-key columns
+CREATE INDEX test_gist_idx_inc ON test_gist USING gist (p) INCLUDE (t);
+SELECT gist_page_items(get_raw_page('test_gist_idx_inc', 0), 'test_gist_idx_inc');
+             gist_page_items              
+------------------------------------------
+ (1,"(1,65535)",40,f,"(p)=((156,156))")
+ (2,"(2,65535)",40,f,"(p)=((312,312))")
+ (3,"(3,65535)",40,f,"(p)=((468,468))")
+ (4,"(4,65535)",40,f,"(p)=((624,624))")
+ (5,"(5,65535)",40,f,"(p)=((718,718))")
+ (6,"(6,65535)",40,f,"(p)=((812,812))")
+ (7,"(7,65535)",40,f,"(p)=((906,906))")
+ (8,"(8,65535)",40,f,"(p)=((1000,1000))")
+(8 rows)
+
+SELECT gist_page_items(get_raw_page('test_gist_idx_inc', 1), 'test_gist_idx_inc');
+                         gist_page_items                          
+------------------------------------------------------------------
+ (1,"(0,1)",48,f,"(p) INCLUDE (t)=((1,1)) INCLUDE (1)")
+ (2,"(0,2)",48,f,"(p) INCLUDE (t)=((2,2)) INCLUDE (2)")
+ (3,"(0,3)",48,f,"(p) INCLUDE (t)=((3,3)) INCLUDE (3)")
+ (4,"(0,4)",48,f,"(p) INCLUDE (t)=((4,4)) INCLUDE (4)")
+ (5,"(0,5)",48,f,"(p) INCLUDE (t)=((5,5)) INCLUDE (5)")
+ (6,"(0,6)",48,f,"(p) INCLUDE (t)=((6,6)) INCLUDE (6)")
+ (7,"(0,7)",48,f,"(p) INCLUDE (t)=((7,7)) INCLUDE (7)")
+ (8,"(0,8)",48,f,"(p) INCLUDE (t)=((8,8)) INCLUDE (8)")
+ (9,"(0,9)",48,f,"(p) INCLUDE (t)=((9,9)) INCLUDE (9)")
+ (10,"(0,10)",48,f,"(p) INCLUDE (t)=((10,10)) INCLUDE (10)")
+ (11,"(0,11)",48,f,"(p) INCLUDE (t)=((11,11)) INCLUDE (11)")
+ (12,"(0,12)",48,f,"(p) INCLUDE (t)=((12,12)) INCLUDE (12)")
+ (13,"(0,13)",48,f,"(p) INCLUDE (t)=((13,13)) INCLUDE (13)")
+ (14,"(0,14)",48,f,"(p) INCLUDE (t)=((14,14)) INCLUDE (14)")
+ (15,"(0,15)",48,f,"(p) INCLUDE (t)=((15,15)) INCLUDE (15)")
+ (16,"(0,16)",48,f,"(p) INCLUDE (t)=((16,16)) INCLUDE (16)")
+ (17,"(0,17)",48,f,"(p) INCLUDE (t)=((17,17)) INCLUDE (17)")
+ (18,"(0,18)",48,f,"(p) INCLUDE (t)=((18,18)) INCLUDE (18)")
+ (19,"(0,19)",48,f,"(p) INCLUDE (t)=((19,19)) INCLUDE (19)")
+ (20,"(0,20)",48,f,"(p) INCLUDE (t)=((20,20)) INCLUDE (20)")
+ (21,"(0,21)",48,f,"(p) INCLUDE (t)=((21,21)) INCLUDE (21)")
+ (22,"(0,22)",48,f,"(p) INCLUDE (t)=((22,22)) INCLUDE (22)")
+ (23,"(0,23)",48,f,"(p) INCLUDE (t)=((23,23)) INCLUDE (23)")
+ (24,"(0,24)",48,f,"(p) INCLUDE (t)=((24,24)) INCLUDE (24)")
+ (25,"(0,25)",48,f,"(p) INCLUDE (t)=((25,25)) INCLUDE (25)")
+ (26,"(0,26)",48,f,"(p) INCLUDE (t)=((26,26)) INCLUDE (26)")
+ (27,"(0,27)",48,f,"(p) INCLUDE (t)=((27,27)) INCLUDE (27)")
+ (28,"(0,28)",48,f,"(p) INCLUDE (t)=((28,28)) INCLUDE (28)")
+ (29,"(0,29)",48,f,"(p) INCLUDE (t)=((29,29)) INCLUDE (29)")
+ (30,"(0,30)",48,f,"(p) INCLUDE (t)=((30,30)) INCLUDE (30)")
+ (31,"(0,31)",48,f,"(p) INCLUDE (t)=((31,31)) INCLUDE (31)")
+ (32,"(0,32)",48,f,"(p) INCLUDE (t)=((32,32)) INCLUDE (32)")
+ (33,"(0,33)",48,f,"(p) INCLUDE (t)=((33,33)) INCLUDE (33)")
+ (34,"(0,34)",48,f,"(p) INCLUDE (t)=((34,34)) INCLUDE (34)")
+ (35,"(0,35)",48,f,"(p) INCLUDE (t)=((35,35)) INCLUDE (35)")
+ (36,"(0,36)",48,f,"(p) INCLUDE (t)=((36,36)) INCLUDE (36)")
+ (37,"(0,37)",48,f,"(p) INCLUDE (t)=((37,37)) INCLUDE (37)")
+ (38,"(0,38)",48,f,"(p) INCLUDE (t)=((38,38)) INCLUDE (38)")
+ (39,"(0,39)",48,f,"(p) INCLUDE (t)=((39,39)) INCLUDE (39)")
+ (40,"(0,40)",48,f,"(p) INCLUDE (t)=((40,40)) INCLUDE (40)")
+ (41,"(0,41)",48,f,"(p) INCLUDE (t)=((41,41)) INCLUDE (41)")
+ (42,"(0,42)",48,f,"(p) INCLUDE (t)=((42,42)) INCLUDE (42)")
+ (43,"(0,43)",48,f,"(p) INCLUDE (t)=((43,43)) INCLUDE (43)")
+ (44,"(0,44)",48,f,"(p) INCLUDE (t)=((44,44)) INCLUDE (44)")
+ (45,"(0,45)",48,f,"(p) INCLUDE (t)=((45,45)) INCLUDE (45)")
+ (46,"(0,46)",48,f,"(p) INCLUDE (t)=((46,46)) INCLUDE (46)")
+ (47,"(0,47)",48,f,"(p) INCLUDE (t)=((47,47)) INCLUDE (47)")
+ (48,"(0,48)",48,f,"(p) INCLUDE (t)=((48,48)) INCLUDE (48)")
+ (49,"(0,49)",48,f,"(p) INCLUDE (t)=((49,49)) INCLUDE (49)")
+ (50,"(0,50)",48,f,"(p) INCLUDE (t)=((50,50)) INCLUDE (50)")
+ (51,"(0,51)",48,f,"(p) INCLUDE (t)=((51,51)) INCLUDE (51)")
+ (52,"(0,52)",48,f,"(p) INCLUDE (t)=((52,52)) INCLUDE (52)")
+ (53,"(0,53)",48,f,"(p) INCLUDE (t)=((53,53)) INCLUDE (53)")
+ (54,"(0,54)",48,f,"(p) INCLUDE (t)=((54,54)) INCLUDE (54)")
+ (55,"(0,55)",48,f,"(p) INCLUDE (t)=((55,55)) INCLUDE (55)")
+ (56,"(0,56)",48,f,"(p) INCLUDE (t)=((56,56)) INCLUDE (56)")
+ (57,"(0,57)",48,f,"(p) INCLUDE (t)=((57,57)) INCLUDE (57)")
+ (58,"(0,58)",48,f,"(p) INCLUDE (t)=((58,58)) INCLUDE (58)")
+ (59,"(0,59)",48,f,"(p) INCLUDE (t)=((59,59)) INCLUDE (59)")
+ (60,"(0,60)",48,f,"(p) INCLUDE (t)=((60,60)) INCLUDE (60)")
+ (61,"(0,61)",48,f,"(p) INCLUDE (t)=((61,61)) INCLUDE (61)")
+ (62,"(0,62)",48,f,"(p) INCLUDE (t)=((62,62)) INCLUDE (62)")
+ (63,"(0,63)",48,f,"(p) INCLUDE (t)=((63,63)) INCLUDE (63)")
+ (64,"(0,64)",48,f,"(p) INCLUDE (t)=((64,64)) INCLUDE (64)")
+ (65,"(0,65)",48,f,"(p) INCLUDE (t)=((65,65)) INCLUDE (65)")
+ (66,"(0,66)",48,f,"(p) INCLUDE (t)=((66,66)) INCLUDE (66)")
+ (67,"(0,67)",48,f,"(p) INCLUDE (t)=((67,67)) INCLUDE (67)")
+ (68,"(0,68)",48,f,"(p) INCLUDE (t)=((68,68)) INCLUDE (68)")
+ (69,"(0,69)",48,f,"(p) INCLUDE (t)=((69,69)) INCLUDE (69)")
+ (70,"(0,70)",48,f,"(p) INCLUDE (t)=((70,70)) INCLUDE (70)")
+ (71,"(0,71)",48,f,"(p) INCLUDE (t)=((71,71)) INCLUDE (71)")
+ (72,"(0,72)",48,f,"(p) INCLUDE (t)=((72,72)) INCLUDE (72)")
+ (73,"(0,73)",48,f,"(p) INCLUDE (t)=((73,73)) INCLUDE (73)")
+ (74,"(0,74)",48,f,"(p) INCLUDE (t)=((74,74)) INCLUDE (74)")
+ (75,"(0,75)",48,f,"(p) INCLUDE (t)=((75,75)) INCLUDE (75)")
+ (76,"(0,76)",48,f,"(p) INCLUDE (t)=((76,76)) INCLUDE (76)")
+ (77,"(0,77)",48,f,"(p) INCLUDE (t)=((77,77)) INCLUDE (77)")
+ (78,"(0,78)",48,f,"(p) INCLUDE (t)=((78,78)) INCLUDE (78)")
+ (79,"(0,79)",48,f,"(p) INCLUDE (t)=((79,79)) INCLUDE (79)")
+ (80,"(0,80)",48,f,"(p) INCLUDE (t)=((80,80)) INCLUDE (80)")
+ (81,"(0,81)",48,f,"(p) INCLUDE (t)=((81,81)) INCLUDE (81)")
+ (82,"(0,82)",48,f,"(p) INCLUDE (t)=((82,82)) INCLUDE (82)")
+ (83,"(0,83)",48,f,"(p) INCLUDE (t)=((83,83)) INCLUDE (83)")
+ (84,"(0,84)",48,f,"(p) INCLUDE (t)=((84,84)) INCLUDE (84)")
+ (85,"(0,85)",48,f,"(p) INCLUDE (t)=((85,85)) INCLUDE (85)")
+ (86,"(0,86)",48,f,"(p) INCLUDE (t)=((86,86)) INCLUDE (86)")
+ (87,"(0,87)",48,f,"(p) INCLUDE (t)=((87,87)) INCLUDE (87)")
+ (88,"(0,88)",48,f,"(p) INCLUDE (t)=((88,88)) INCLUDE (88)")
+ (89,"(0,89)",48,f,"(p) INCLUDE (t)=((89,89)) INCLUDE (89)")
+ (90,"(0,90)",48,f,"(p) INCLUDE (t)=((90,90)) INCLUDE (90)")
+ (91,"(0,91)",48,f,"(p) INCLUDE (t)=((91,91)) INCLUDE (91)")
+ (92,"(0,92)",48,f,"(p) INCLUDE (t)=((92,92)) INCLUDE (92)")
+ (93,"(0,93)",48,f,"(p) INCLUDE (t)=((93,93)) INCLUDE (93)")
+ (94,"(0,94)",48,f,"(p) INCLUDE (t)=((94,94)) INCLUDE (94)")
+ (95,"(0,95)",48,f,"(p) INCLUDE (t)=((95,95)) INCLUDE (95)")
+ (96,"(0,96)",48,f,"(p) INCLUDE (t)=((96,96)) INCLUDE (96)")
+ (97,"(0,97)",48,f,"(p) INCLUDE (t)=((97,97)) INCLUDE (97)")
+ (98,"(0,98)",48,f,"(p) INCLUDE (t)=((98,98)) INCLUDE (98)")
+ (99,"(0,99)",48,f,"(p) INCLUDE (t)=((99,99)) INCLUDE (99)")
+ (100,"(0,100)",48,f,"(p) INCLUDE (t)=((100,100)) INCLUDE (100)")
+ (101,"(0,101)",48,f,"(p) INCLUDE (t)=((101,101)) INCLUDE (101)")
+ (102,"(0,102)",48,f,"(p) INCLUDE (t)=((102,102)) INCLUDE (102)")
+ (103,"(0,103)",48,f,"(p) INCLUDE (t)=((103,103)) INCLUDE (103)")
+ (104,"(0,104)",48,f,"(p) INCLUDE (t)=((104,104)) INCLUDE (104)")
+ (105,"(0,105)",48,f,"(p) INCLUDE (t)=((105,105)) INCLUDE (105)")
+ (106,"(0,106)",48,f,"(p) INCLUDE (t)=((106,106)) INCLUDE (106)")
+ (107,"(0,107)",48,f,"(p) INCLUDE (t)=((107,107)) INCLUDE (107)")
+ (108,"(0,108)",48,f,"(p) INCLUDE (t)=((108,108)) INCLUDE (108)")
+ (109,"(0,109)",48,f,"(p) INCLUDE (t)=((109,109)) INCLUDE (109)")
+ (110,"(0,110)",48,f,"(p) INCLUDE (t)=((110,110)) INCLUDE (110)")
+ (111,"(0,111)",48,f,"(p) INCLUDE (t)=((111,111)) INCLUDE (111)")
+ (112,"(0,112)",48,f,"(p) INCLUDE (t)=((112,112)) INCLUDE (112)")
+ (113,"(0,113)",48,f,"(p) INCLUDE (t)=((113,113)) INCLUDE (113)")
+ (114,"(0,114)",48,f,"(p) INCLUDE (t)=((114,114)) INCLUDE (114)")
+ (115,"(0,115)",48,f,"(p) INCLUDE (t)=((115,115)) INCLUDE (115)")
+ (116,"(0,116)",48,f,"(p) INCLUDE (t)=((116,116)) INCLUDE (116)")
+ (117,"(0,117)",48,f,"(p) INCLUDE (t)=((117,117)) INCLUDE (117)")
+ (118,"(0,118)",48,f,"(p) INCLUDE (t)=((118,118)) INCLUDE (118)")
+ (119,"(0,119)",48,f,"(p) INCLUDE (t)=((119,119)) INCLUDE (119)")
+ (120,"(0,120)",48,f,"(p) INCLUDE (t)=((120,120)) INCLUDE (120)")
+ (121,"(0,121)",48,f,"(p) INCLUDE (t)=((121,121)) INCLUDE (121)")
+ (122,"(0,122)",48,f,"(p) INCLUDE (t)=((122,122)) INCLUDE (122)")
+ (123,"(0,123)",48,f,"(p) INCLUDE (t)=((123,123)) INCLUDE (123)")
+ (124,"(0,124)",48,f,"(p) INCLUDE (t)=((124,124)) INCLUDE (124)")
+ (125,"(0,125)",48,f,"(p) INCLUDE (t)=((125,125)) INCLUDE (125)")
+ (126,"(0,126)",48,f,"(p) INCLUDE (t)=((126,126)) INCLUDE (126)")
+ (127,"(0,127)",48,f,"(p) INCLUDE (t)=((127,127)) INCLUDE (127)")
+ (128,"(0,128)",48,f,"(p) INCLUDE (t)=((128,128)) INCLUDE (128)")
+ (129,"(0,129)",48,f,"(p) INCLUDE (t)=((129,129)) INCLUDE (129)")
+ (130,"(0,130)",48,f,"(p) INCLUDE (t)=((130,130)) INCLUDE (130)")
+ (131,"(0,131)",48,f,"(p) INCLUDE (t)=((131,131)) INCLUDE (131)")
+ (132,"(0,132)",48,f,"(p) INCLUDE (t)=((132,132)) INCLUDE (132)")
+ (133,"(0,133)",48,f,"(p) INCLUDE (t)=((133,133)) INCLUDE (133)")
+ (134,"(0,134)",48,f,"(p) INCLUDE (t)=((134,134)) INCLUDE (134)")
+ (135,"(0,135)",48,f,"(p) INCLUDE (t)=((135,135)) INCLUDE (135)")
+ (136,"(0,136)",48,f,"(p) INCLUDE (t)=((136,136)) INCLUDE (136)")
+ (137,"(0,137)",48,f,"(p) INCLUDE (t)=((137,137)) INCLUDE (137)")
+ (138,"(0,138)",48,f,"(p) INCLUDE (t)=((138,138)) INCLUDE (138)")
+ (139,"(0,139)",48,f,"(p) INCLUDE (t)=((139,139)) INCLUDE (139)")
+ (140,"(0,140)",48,f,"(p) INCLUDE (t)=((140,140)) INCLUDE (140)")
+ (141,"(0,141)",48,f,"(p) INCLUDE (t)=((141,141)) INCLUDE (141)")
+ (142,"(0,142)",48,f,"(p) INCLUDE (t)=((142,142)) INCLUDE (142)")
+ (143,"(0,143)",48,f,"(p) INCLUDE (t)=((143,143)) INCLUDE (143)")
+ (144,"(0,144)",48,f,"(p) INCLUDE (t)=((144,144)) INCLUDE (144)")
+ (145,"(0,145)",48,f,"(p) INCLUDE (t)=((145,145)) INCLUDE (145)")
+ (146,"(0,146)",48,f,"(p) INCLUDE (t)=((146,146)) INCLUDE (146)")
+ (147,"(0,147)",48,f,"(p) INCLUDE (t)=((147,147)) INCLUDE (147)")
+ (148,"(0,148)",48,f,"(p) INCLUDE (t)=((148,148)) INCLUDE (148)")
+ (149,"(0,149)",48,f,"(p) INCLUDE (t)=((149,149)) INCLUDE (149)")
+ (150,"(0,150)",48,f,"(p) INCLUDE (t)=((150,150)) INCLUDE (150)")
+ (151,"(0,151)",48,f,"(p) INCLUDE (t)=((151,151)) INCLUDE (151)")
+ (152,"(0,152)",48,f,"(p) INCLUDE (t)=((152,152)) INCLUDE (152)")
+ (153,"(0,153)",48,f,"(p) INCLUDE (t)=((153,153)) INCLUDE (153)")
+ (154,"(0,154)",48,f,"(p) INCLUDE (t)=((154,154)) INCLUDE (154)")
+ (155,"(0,155)",48,f,"(p) INCLUDE (t)=((155,155)) INCLUDE (155)")
+ (156,"(0,156)",48,f,"(p) INCLUDE (t)=((156,156)) INCLUDE (156)")
+(156 rows)
+
 DROP TABLE test_gist;
diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c
index 3dca7f1318..422290311c 100644
--- a/contrib/pageinspect/gistfuncs.c
+++ b/contrib/pageinspect/gistfuncs.c
@@ -24,6 +24,8 @@
 #include "utils/rel.h"
 #include "utils/pg_lsn.h"
 #include "utils/varlena.h"
+#include "utils/ruleutils.h"
+#include "utils/lsyscache.h"
 
 PG_FUNCTION_INFO_V1(gist_page_opaque_info);
 PG_FUNCTION_INFO_V1(gist_page_items);
@@ -198,9 +200,12 @@ gist_page_items(PG_FUNCTION_ARGS)
 	Oid			indexRelid = PG_GETARG_OID(1);
 	ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
 	Relation	indexRel;
+	TupleDesc	tupdesc;
 	Page		page;
+	uint16		flagbits;
 	OffsetNumber offset;
 	OffsetNumber maxoff = InvalidOffsetNumber;
+	char	   *index_columns;
 
 	if (!superuser())
 		ereport(ERROR,
@@ -226,6 +231,19 @@ gist_page_items(PG_FUNCTION_ARGS)
 		PG_RETURN_NULL();
 	}
 
+	flagbits = GistPageGetOpaque(page)->flags;
+	if (flagbits & F_LEAF)
+	{
+		tupdesc = RelationGetDescr(indexRel);
+		index_columns = pg_get_indexdef_columns_with_included(indexRelid, true);
+	}
+	else
+	{
+		tupdesc = CreateTupleDescCopy(RelationGetDescr(indexRel));
+		tupdesc->natts = IndexRelationGetNumberOfKeyAttributes(indexRel);
+		index_columns = pg_get_indexdef_columns(indexRelid, true);
+	}
+
 	/* Avoid bogus PageGetMaxOffsetNumber() call with deleted pages */
 	if (GistPageIsDeleted(page))
 		elog(NOTICE, "page is deleted");
@@ -242,7 +260,8 @@ gist_page_items(PG_FUNCTION_ARGS)
 		IndexTuple	itup;
 		Datum		itup_values[INDEX_MAX_KEYS];
 		bool		itup_isnull[INDEX_MAX_KEYS];
-		char	   *key_desc;
+		StringInfoData buf;
+		int			i;
 
 		id = PageGetItemId(page, offset);
 
@@ -251,7 +270,7 @@ gist_page_items(PG_FUNCTION_ARGS)
 
 		itup = (IndexTuple) PageGetItem(page, id);
 
-		index_deform_tuple(itup, RelationGetDescr(indexRel),
+		index_deform_tuple(itup, tupdesc,
 						   itup_values, itup_isnull);
 
 		memset(nulls, 0, sizeof(nulls));
@@ -261,9 +280,56 @@ gist_page_items(PG_FUNCTION_ARGS)
 		values[2] = Int32GetDatum((int) IndexTupleSize(itup));
 		values[3] = BoolGetDatum(ItemIdIsDead(id));
 
-		key_desc = BuildIndexValueDescription(indexRel, itup_values, itup_isnull);
-		if (key_desc)
-			values[4] = CStringGetTextDatum(key_desc);
+		if (index_columns)
+		{
+			initStringInfo(&buf);
+			appendStringInfo(&buf, "(%s)=(", index_columns);
+
+			for (i = 0; i < tupdesc->natts; i++)
+			{
+				char	   *val;
+
+				if (itup_isnull[i])
+					val = "null";
+				else
+				{
+					Oid			foutoid;
+					bool		typisvarlena;
+
+					if (i < IndexRelationGetNumberOfKeyAttributes(indexRel))
+					{
+						/*
+						* Use rd_opcintype for key columns as in
+						* BuildIndexValueDescription().
+						*/
+						getTypeOutputInfo(indexRel->rd_opcintype[i],
+										  &foutoid, &typisvarlena);
+					}
+					else
+					{
+						getTypeOutputInfo(tupdesc->attrs[i].atttypid,
+										  &foutoid, &typisvarlena);
+					}
+					val = OidOutputFunctionCall(foutoid, itup_values[i]);
+				}
+
+				if (i == IndexRelationGetNumberOfKeyAttributes(indexRel))
+				{
+					appendStringInfoString(&buf, ") INCLUDE (");
+				}
+				else if (i > 0)
+				{
+					appendStringInfoString(&buf, ", ");
+				}
+
+				appendStringInfoString(&buf, val);
+			}
+
+			appendStringInfoChar(&buf, ')');
+
+			values[4] = CStringGetTextDatum(buf.data);
+			nulls[4] = false;
+		}
 		else
 		{
 			values[4] = (Datum) 0;
diff --git a/contrib/pageinspect/sql/gist.sql b/contrib/pageinspect/sql/gist.sql
index 4787b784a4..16cc14bcac 100644
--- a/contrib/pageinspect/sql/gist.sql
+++ b/contrib/pageinspect/sql/gist.sql
@@ -52,4 +52,9 @@ SELECT gist_page_items_bytea(decode(repeat('00', :block_size), 'hex'));
 SELECT gist_page_items(decode(repeat('00', :block_size), 'hex'), 'test_gist_idx'::regclass);
 SELECT gist_page_opaque_info(decode(repeat('00', :block_size), 'hex'));
 
+-- Test gist_page_items with pages of an index containing non-key columns
+CREATE INDEX test_gist_idx_inc ON test_gist USING gist (p) INCLUDE (t);
+SELECT gist_page_items(get_raw_page('test_gist_idx_inc', 0), 'test_gist_idx_inc');
+SELECT gist_page_items(get_raw_page('test_gist_idx_inc', 1), 'test_gist_idx_inc');
+
 DROP TABLE test_gist;
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 60f9d08d5d..71f650868a 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -1215,6 +1215,20 @@ pg_get_indexdef_columns(Oid indexrelid, bool pretty)
 								  prettyFlags, false);
 }
 
+/* Internal version that reports also the non-key-column definitions */
+char *
+pg_get_indexdef_columns_with_included(Oid indexrelid, bool pretty)
+{
+	int			prettyFlags;
+
+	prettyFlags = GET_PRETTY_FLAGS(pretty);
+
+	return pg_get_indexdef_worker(indexrelid, 0, NULL,
+								  true, false,
+								  false, false,
+								  prettyFlags, false);
+}
+
 /*
  * Internal workhorse to decompile an index definition.
  *
diff --git a/src/include/utils/ruleutils.h b/src/include/utils/ruleutils.h
index 1a42d9f39b..d221724cc1 100644
--- a/src/include/utils/ruleutils.h
+++ b/src/include/utils/ruleutils.h
@@ -23,6 +23,8 @@ struct PlannedStmt;
 
 extern char *pg_get_indexdef_string(Oid indexrelid);
 extern char *pg_get_indexdef_columns(Oid indexrelid, bool pretty);
+extern char *pg_get_indexdef_columns_with_included(Oid indexrelid,
+												   bool pretty);
 extern char *pg_get_querydef(Query *query, bool pretty);
 
 extern char *pg_get_partkeydef_columns(Oid relid, bool pretty);
