Re: When to switch to Postgres 8.0? - Mailing list pgsql-general
From | Tom Lane |
---|---|
Subject | Re: When to switch to Postgres 8.0? |
Date | |
Msg-id | 16512.1100243031@sss.pgh.pa.us Whole thread Raw |
In response to | Re: When to switch to Postgres 8.0? (Christopher Browne <cbbrowne@acm.org>) |
List | pgsql-general |
Christopher Browne <cbbrowne@acm.org> writes: > The world rejoiced as jao@geophile.com wrote: >> Suppose 8.0 is released in December or January. Is it a sane thing >> to put 8.0 in a shipping product within the first two months of its >> release? >> ... >> Suppose I don't use any new features. The question is then whether >> I'm likely to be affected by a regression. >> ... >> We'll be doing extensive testing between code freeze and our ship >> date. > Certainly a good move... My advice would be "trust, but verify" ... that is, use 8.0 and test it as hard as you can. You will be contributing something back to the community by so testing, and you will probably end up with a better product than if you took the "conservative" route of using 7.4. While it's certainly true that 8.0 includes some major changes, so did the last several releases; and nonetheless my feeling is that each release has been higher quality on average than its predecessor. We are on average introducing fewer (post-release) bugs than we fix. To try to provide some hard evidence, I dug through the recent CVS change logs. Attached are all the post-release 7.4 bug fixes that did not either (a) represent a bug that also existed in 7.3, or (b) represent a fix in a feature that did not exist in 7.3. Thus this list would be a fair gauge of your risk had you updated to 7.4 on Day Zero. (Disclaimer: I didn't try to evaluate some ecpg and tsearch bugs that were fixed in this interval; maybe they were in 7.3 too, or maybe not.) There are twenty bugs in this list. It is worth pointing out that in the same interval there were also twenty nontrivial patches applied to both 7.3 and 7.4 branches (ie, bugs older than 7.4), as well as several bugs that were fixed in 7.4 but not in 7.3 because the change seemed too invasive/risky for the older branch. Moreover, only one of the new-in-7.4 bugs poses any risk of data corruption, whereas three of the 7.4-and-7.3 bugs did. I'm too lazy to do a comparable analysis of the prior releases, but my gut feeling is that every release since 6.5 or so has been as good or better than its predecessor, even on day zero. Yeah, there are localized regressions, but there are also lots of bugs fixed. The way to defend yourself against being bit by a localized regression is to get involved with testing your applications against the beta releases, as early and aggressively as possible. The only aspect of 8.0 that I don't care to play Pollyanna about is the native Windows port. That's a whole lot of new code with no track record and not that much field testing yet. But as long as you are thinking of running on a non-Microsoft OS, I'd say "go for it". regards, tom lane 2004-08-17 19:15 tgl * src/backend/access/nbtree/: nbtinsert.c (REL7_4_STABLE), nbtinsert.c: Fix bug introduced into _bt_getstackbuf() on 2003-Feb-21: the initial value of 'start' could be past the end of the page, if the page was split by some concurrent inserting process since we visited it. In this situation the code could look at bogus entries and possibly find a match (since after all those entries still contain what they had before the split). This would lead to 'specified item offset is too large' followed by 'PANIC: failed to add item to the page', as reported by Joe Conway for scenarios involving heavy concurrent insertion activity. 7.4.3 2004-05-10 22:21 tgl * src/backend/optimizer/plan/planner.c (REL7_4_STABLE): Repair recalculation failure for nested sub-SELECTs, per bug report from Didier Moens. Bug is new in 7.4, and was caused by not updating everyplace I should've when replacing locParam markers by allParam. 2004-03-12 19:54 tgl * src/backend/executor/: nodeAgg.c (REL7_4_STABLE), nodeAgg.c: Repair memory leakage introduced into the non-hashed aggregate case by 7.4 rewrite for hashed aggregate support. If the transition data type is pass-by-reference, the transValue must be pfreed when starting a new group boundary, else we have a one-value-per-group leakage. Thanks to Rae Steining for providing a reproducible test case. 7.4.2 2004-03-02 13:56 tgl * src/: backend/executor/execAmi.c, backend/executor/execMain.c, include/executor/executor.h (REL7_4_STABLE), backend/executor/execAmi.c, backend/executor/execMain.c, include/executor/executor.h: Junkfilter logic to force a projection step during SELECT INTO was too simplistic; it recognized SELECT * FROM but not SELECT * FROM LIMIT. Per bug report from Jeff Bohmer. 2004-02-29 12:36 tgl * src/backend/optimizer/plan/: createplan.c (REL7_4_STABLE), createplan.c: make_sort_from_pathkeys()'s method for choosing which of several equivalent sort expressions to use was broken: you can't just look at the relation membership, you have to actually grovel over the individual Vars in each expression. I think this did work when it was written, but it was broken by subsequent optimizations that made join relations not propagate every single input variable upward. Must find the Var that got propagated, not choose one at random. Per bug report from Daniel O'Neill. 2004-02-24 17:59 tgl * src/include/catalog/: pg_type.h (REL7_4_STABLE), pg_type.h: anyarray really needs to be declared with typalign = 'd', so that entries in pg_statistic are correctly aligned if they contain values that require double alignment. Too bad we cannot force initdb for this in 7.4 branch. 2004-02-15 10:40 meskes * src/interfaces/ecpg/preproc/preproc.y (REL7_4_STABLE): - Allowed some C keywords to be used as SQL column names. This used to work in 7.3.* 2004-02-13 17:26 tgl * src/backend/optimizer/plan/: planner.c (REL7_4_STABLE), planner.c: Repair optimization bug I introduced in a moment of brain fade back in Nov 2002: when constant-expression simplification removes all the aggregate function calls from a query, that doesn't mean we can act as though there never were any aggregates. Per bug report from Gabor Szucs. 2004-01-28 02:46 tgl * src/backend/parser/: parse_agg.c (REL7_4_STABLE), parse_agg.c: Fix oversight in check_ungrouped_columns optimization that avoids unnecessary checks for complex grouping expressions: we cannot check whether the expressions are simple Vars until after we apply flatten_join_alias_vars, because in the case of FULL JOIN that routine can introduce non-Var expressions. Per example from Joel Knight. 2004-01-23 19:37 tgl * src/backend/optimizer/path/: joinrels.c (REL7_4_STABLE), joinrels.c: Repair planner failure for cases involving Cartesian products inside IN (sub-SELECT) constructs. We must force a clauseless join of the sub-select member relations, but it wasn't happening because the code thought it would be able to use the join clause arising from the IN. 2004-01-21 21:23 tgl * src/: backend/executor/execMain.c, backend/executor/execScan.c, backend/executor/execUtils.c, backend/executor/nodeAppend.c, include/executor/executor.h, include/nodes/execnodes.h (REL7_4_STABLE), backend/executor/execMain.c, backend/executor/execScan.c, backend/executor/execUtils.c, backend/executor/nodeAppend.c, include/executor/executor.h, include/nodes/execnodes.h: Fix oversight in optimization that avoids an unnecessary projection step when scanning a table that we need all the columns from. In case of SELECT INTO, we have to check that the hasoids flag matches the desired output type, too. Per report from Mike Mascari. 2004-01-17 21:15 tgl * src/backend/commands/: copy.c (REL7_4_STABLE), copy.c: Don't use %s-with-precision format spec to truncate data being displayed in a COPY error message. It seems that glibc gets indigestion if it is asked to truncate strings that contain invalid UTF-8 encoding sequences. vsnprintf will return -1 in such cases, leading to looping and eventual memory overflow in elog.c. Instead use our own, more robust pg_mbcliplen routine. I believe this problem accounts for several recent reports of unexpected 'out of memory' errors during COPY IN. 2004-01-17 19:31 tgl * src/backend/optimizer/plan/createplan.c (REL7_4_STABLE): Repair faulty plan generation in cases where we choose to implement an IN clause by mergejoin, and a type coercion is needed just above the subplan. A more extensive patch will follow in HEAD. 2003-12-30 15:05 tgl * src/backend/executor/: nodeIndexscan.c (REL7_4_STABLE), nodeIndexscan.c: Avoid running out of memory during hash_create, by not passing a number-of-buckets that exceeds the size we actually plan to allow the hash table to grow to. Per trouble report from Sean Shanny. 2003-12-28 12:43 tgl * src/interfaces/libpq/: fe-protocol3.c (REL7_4_STABLE), fe-protocol3.c: Fix sanity-check code that mistakenly assumed error and notice messages could never exceed 30K. Per report from Andreas Pflug. 7.4.1 2003-12-17 14:49 tgl * src/backend/parser/: parse_coerce.c (REL7_4_STABLE), parse_coerce.c: Reorder tests in parse_coerce so that ANY/ANYELEMENT/ANYARRAY coercion does not affect UNKNOWN-type literals or Params. This fixes the recent complaint about count('x') being broken, and improves consistency in a few other respects too. 2003-12-17 12:07 tgl * src/backend/optimizer/path/: allpaths.c, joinrels.c (REL7_4_STABLE), allpaths.c, joinrels.c: Repair planner failure when there are multiple IN clauses, each with a join in its subselect. In this situation we *must* build a bushy plan because there are no valid left-sided or right-sided join trees. Accordingly, hoary sanity check needs an update. Per report from Alessandro Depase. 2003-12-08 13:19 tgl * src/backend/optimizer/util/: relnode.c (REL7_4_STABLE), relnode.c: Whole-row references were broken for subqueries and functions, because attr_needed/attr_widths optimization failed to allow for Vars with attno zero in this case. Per report from Tatsuo Ishii. 2003-12-03 12:45 tgl * src/: backend/optimizer/path/costsize.c, backend/optimizer/path/pathkeys.c, backend/utils/cache/lsyscache.c, include/utils/lsyscache.h (REL7_4_STABLE), backend/optimizer/path/costsize.c, backend/optimizer/path/pathkeys.c, backend/utils/cache/lsyscache.c, include/utils/lsyscache.h: Planner failed to be smart about binary-compatible expressions in pathkeys and hash bucket-size estimation. Issue has been there awhile but is more critical in 7.4 because it affects varchar columns. Per report from Greg Stark. 2003-11-25 14:17 tgl * src/backend/: executor/nodeHashjoin.c, optimizer/plan/createplan.c (REL7_4_STABLE): Band-aid solution for problems with SubPlans used in hash join clauses, per report from Andrew Holm-Hansen. The difficulty arises from the fact that the planner allowed a Hash node's hashkeys to share substructure with the parent HashJoin node's hashclauses, plus some rather bizarre choices about who initializes what during executor startup. A cleaner but more invasive solution is to not store hashkeys separately in the plan tree at all, but let the HashJoin node deconstruct hashclauses during executor startup. I plan to fix it that way in HEAD.
pgsql-general by date: