Avoiding Application Re-test

Started by Simon Riggsover 17 years ago4 messages
#1Simon Riggs
simon@2ndquadrant.com

Tom's recent changes to allow hash distinct (yay!) prompted something
that I'd thought about previously.

Subtle changes in the output of queries can force an application retest,
which then can slow down or prevent an upgrade to the latest release. We
always assume the upgrade itself is the problem, but the biggest barrier
I see is the cost and delay involved in upgrading the application.

We could invent a new parameter called enable_sort_distinct, but thats
way too specific and horrible.

What I would like is a parameter called sql_compatibility which has
settings such as 8.3, 8.4 etc.. By default it would have the value 8.4,
but for people that want to upgrade *without* retesting their
application, they could set it to 8.3.

Every time we introduce a feature that changes output, we just put an if
test in saying sql_compatibility = X, (the release we added feature).

Straightforward, futureproof. Cool.

Not foolproof, but still worth it. This would allow many users to
upgrade to 8.4 for new features, yet without changing apps.

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

#2Alvaro Herrera
alvherre@commandprompt.com
In reply to: Simon Riggs (#1)
Re: Avoiding Application Re-test

Simon Riggs wrote:

What I would like is a parameter called sql_compatibility which has
settings such as 8.3, 8.4 etc.. By default it would have the value 8.4,
but for people that want to upgrade *without* retesting their
application, they could set it to 8.3.

I think down this route lies code readability and maintenability
madness. Right now, the optimizer and executor code is already a very
complex beast. We don't need to make it more difficult to understand
and improve.

Besides, the guys not updating their applications would not be
benefitted by the upgrade if they kept the compatibility with the older
version, so why would they upgrade?

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#3Asko Oja
ascoja@gmail.com
In reply to: Simon Riggs (#1)
Re: Avoiding Application Re-test

It would make PostgreSQL too much like Oracle ;) Let's keep PostgreSQL
simple and compact please.
I prefer applications retest when migrating to new PostgreSQL version. In
this case surprises happen then you expect them not in some unforeseen point
of time in the future.
Keeping all this old functionality around will make maintenance and adding
new stuff harder.
It also complicates tracking problems where in addition to db version you
need to find out what version it is supposed to emulate.

On Thu, Aug 7, 2008 at 5:17 PM, Simon Riggs <simon@2ndquadrant.com> wrote:

Show quoted text

Tom's recent changes to allow hash distinct (yay!) prompted something
that I'd thought about previously.

Subtle changes in the output of queries can force an application retest,
which then can slow down or prevent an upgrade to the latest release. We
always assume the upgrade itself is the problem, but the biggest barrier
I see is the cost and delay involved in upgrading the application.

We could invent a new parameter called enable_sort_distinct, but thats
way too specific and horrible.

What I would like is a parameter called sql_compatibility which has
settings such as 8.3, 8.4 etc.. By default it would have the value 8.4,
but for people that want to upgrade *without* retesting their
application, they could set it to 8.3.

Every time we introduce a feature that changes output, we just put an if
test in saying sql_compatibility = X, (the release we added feature).

Straightforward, futureproof. Cool.

Not foolproof, but still worth it. This would allow many users to
upgrade to 8.4 for new features, yet without changing apps.

--
Simon Riggs www.2ndQuadrant.com
PostgreSQL Training, Services and Support

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4chris
chris@dba2.int.libertyrms.com
In reply to: Simon Riggs (#1)
Re: Avoiding Application Re-test

simon@2ndquadrant.com (Simon Riggs) writes:

Every time we introduce a feature that changes output, we just put an if
test in saying sql_compatibility = X, (the release we added feature).

Straightforward, futureproof. Cool.

This is somewhat like the way that some shells try to emulate others;
for instance, zsh tries to emulate "sh" or "ksh" when invoked by those
names.

There are two problems with this:

a) The conspicuous phrase, "try to emulate"

Which leaves open several questions:

- What if we can't?

- What about when we don't want to (e.g. - because the new
version has a new behaviour that we *DO* want)?

- What if some semantic change takes place that we didn't
realize should have been open to the "try to emulate"?
Such as, where there's an ordering change...

b) It requires adding a new, not-previous-existant effort to
classify changes and put in logic to allow controlling whether we
use "legacy logic" or "new logic."

That seems likely to get mighty messy to me, requiring
"blabbering" control code throughout the code base.

I don't think we actually get the "future proofness" that you're
suggesting. It would be nice if we could, but that seems unrealistic.
--
let name="cbbrowne" and tld="linuxdatabases.info" in String.concat "@" [name;tld];;
http://linuxfinances.info/info/spiritual.html
Rules of the Evil Overlord #204. "I will hire an entire squad of blind
guards. Not only is this in keeping with my status as an equal
opportunity employer, but it will come in handy when the hero becomes
invisible or douses my only light source."
<http://www.eviloverlord.com/&gt;