From 65806683924e0932a06cab1746bd815f2da8a716 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 4 Jan 2000 17:27:26 +0000 Subject: [PATCH] Back-patch fix for problems with oversize pg_statistic tuples when both the min and max values of a column are long. --- src/backend/commands/vacuum.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 0ce01efd574..bd315ffeda6 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.110.2.3 1999/08/25 12:01:45 ishii Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.110.2.4 2000/01/04 17:27:26 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2405,10 +2405,21 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * stup = heap_formtuple(sd->rd_att, values, nulls); /* ---------------- - * insert the tuple in the relation and get the tuple's oid. + * Watch out for oversize tuple, which can happen if + * both of the saved data values are long. + * Our fallback strategy is just to not store the + * pg_statistic tuple at all in that case. (We could + * replace the values by NULLs and still store the + * numeric stats, but presently selfuncs.c couldn't + * do anything useful with that case anyway.) * ---------------- */ - heap_insert(sd, stup); + if (MAXALIGN(stup->t_len) <= MaxTupleSize) + { + /* OK to store tuple */ + heap_insert(sd, stup); + } + pfree(DatumGetPointer(values[3])); pfree(DatumGetPointer(values[4])); pfree(stup); -- 2.39.5