From 56303abff0e30cbac3faedd17c7b52ea9886ffba Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Tue, 16 Oct 2007 17:05:26 +0000
Subject: [PATCH] Tweak toast-related logic in heapam.c so that the toaster is
 only invoked when relkind = RELKIND_RELATION.  This syncs these tests with
 the Asserts in tuptoaster.c, and ensures that we won't ever try to, for
 example, compress a sequence's tuple.  Problem found by Greg Stark while
 stress-testing with much-smaller-than-normal page sizes.

---
 src/backend/access/heap/heapam.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 0f8d52bd0c6..95890a86c4a 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.242 2007/09/21 21:25:42 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.243 2007/10/16 17:05:26 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1758,7 +1758,7 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid,
 	 * Note: below this point, heaptup is the data we actually intend to store
 	 * into the relation; tup is the caller's original untoasted data.
 	 */
-	if (relation->rd_rel->relkind == RELKIND_TOASTVALUE)
+	if (relation->rd_rel->relkind != RELKIND_RELATION)
 	{
 		/* toast table entries should never be recursively toasted */
 		Assert(!HeapTupleHasExternal(tup));
@@ -2125,7 +2125,7 @@ l1:
 	 * because we need to look at the contents of the tuple, but it's OK to
 	 * release the content lock on the buffer first.
 	 */
-	if (relation->rd_rel->relkind == RELKIND_TOASTVALUE)
+	if (relation->rd_rel->relkind != RELKIND_RELATION)
 	{
 		/* toast table entries should never be recursively toasted */
 		Assert(!HeapTupleHasExternal(&tp));
@@ -2440,7 +2440,7 @@ l2:
 	 * We need to invoke the toaster if there are already any out-of-line
 	 * toasted values present, or if the new tuple is over-threshold.
 	 */
-	if (relation->rd_rel->relkind == RELKIND_TOASTVALUE)
+	if (relation->rd_rel->relkind != RELKIND_RELATION)
 	{
 		/* toast table entries should never be recursively toasted */
 		Assert(!HeapTupleHasExternal(&oldtup));
-- 
GitLab