Re: BUG #1453: NULLs in UNION query

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: m(dot)woehling(at)barthauer(dot)de
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #1453: NULLs in UNION query
Date: 2005-02-01 04:45:59
Message-ID: 9878.1107233159@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

"" <m(dot)woehling(at)barthauer(dot)de> writes:
> The following query should not raise an error ("ERROR: UNION types text and
> integer cannot be matched"):

> SELECT NULL AS Test
> UNION ALL SELECT NULL
> UNION ALL SELECT 0

Hmm ... it works if you do

SELECT NULL AS Test
UNION ALL (SELECT NULL
UNION ALL SELECT 0)

The problem is that transformSetOperationTree() resolves the column
datatypes one UNION pair at a time, and so the two NULLs default to
"text" before we ever look at the zero.

It's probably possible to rejigger it so that the common type is chosen
considering all the set-operation arms in parallel, but it doesn't seem
like a trivial change. (Translation: there will not be an immediate
fix.)

As a workaround, perhaps you could cast one or all of the nulls to int
explicitly:

SELECT NULL::int AS Test
UNION ALL SELECT NULL
UNION ALL SELECT 0

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Mehul Doshi-A20614 2005-02-01 07:03:06 Re: Template1 is locked when pgAdminIII is open
Previous Message Tom Lane 2005-02-01 03:45:08 Re: [Feed-back] Installing PostgreSQL 8.0.0 on SPARC/Solaris. Configure and install issues.