Received: from localhost (unknown [200.46.204.182]) by postgresql.org (Postfix) with ESMTP id C01152E181E; Tue, 13 Nov 2007 13:11:51 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.182]) (amavisd-maia, port 10024) with ESMTP id 55016-09; Tue, 13 Nov 2007 13:11:48 -0400 (AST) Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130]) by postgresql.org (Postfix) with ESMTP id 98C152E180D; Tue, 13 Nov 2007 13:11:48 -0400 (AST) Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.1/8.14.1) with ESMTP id lADHBhtS018130; Tue, 13 Nov 2007 12:11:43 -0500 (EST) To: Peter Eisentraut cc: pgsql-advocacy@postgresql.org, josh@agliodbs.com, pgsql-docs@postgresql.org Subject: Re: [DOCS] Avoiding upgrade backlash In-reply-to: <200711131045.04878.peter_e@gmx.net> References: <200711121442.31233.josh@agliodbs.com> <200711131045.04878.peter_e@gmx.net> Comments: In-reply-to Peter Eisentraut message dated "Tue, 13 Nov 2007 10:45:04 +0100" Date: Tue, 13 Nov 2007 12:11:43 -0500 Message-ID: <18129.1194973903@sss.pgh.pa.us> From: Tom Lane X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200711/73 X-Sequence-Number: 12890 Peter Eisentraut writes: > Am Montag, 12. November 2007 schrieb Josh Berkus: >> 3) If Robert gets his type-cast backport package together, the location of >> that. > Well, if you want to undo the changes, you don't need a backport > package; you can just change the cast's definition. It's actually not going to be that easy, because most of those casts aren't even in pg_cast anymore: they have been subsumed into the CoerceViaIO mechanism. You'd need to resurrect the individual cast functions before you could put entries back, too. Another little problem is that you're likely to break as much stuff as you fix. An example in CVS HEAD: regression=# select 42 || 'foo'; ?column? ---------- 42foo (1 row) regression=# select 42 like 'foo'; ERROR: operator does not exist: integer ~~ unknown LINE 1: select 42 like 'foo'; ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. OK, let's "fix" that by making int->text implicit again: regression=# create function inttotext(int) returns text as $$ regression$# begin return $1; end$$ language plpgsql strict immutable; CREATE FUNCTION regression=# create cast (int as text) with function inttotext(int) regression-# as implicit; CREATE CAST Now LIKE works: regression=# select 42 like 'foo'; ?column? ---------- f (1 row) but || not so much: regression=# select 42 || 'foo'; ERROR: operator is not unique: integer || unknown LINE 1: select 42 || 'foo'; ^ HINT: Could not choose a best candidate operator. You might need to add explicit type casts. regards, tom lane