Обсуждение: _text problem in union

Поиск
Список
Период
Сортировка

_text problem in union

От
Zakkr
Дата:
Hi,
I have small problem with text array in union query..     see:


abil=> select 5 union select 5;
?column?
--------      5
(1 row)

abil=> select 5 union select 6;
?column?
--------      5      6
(2 rows)

abil=> select '{"aaa"}'::_text union select '{"aaa"}'::_text;
?column?
--------
{"aaa"} 
(1 row)

abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
ERROR:  Unable to identify an ordering operator '<' for type '_text'       Use an explicit ordering operator or modify
thequery
 
abil=> 


... hmm, any suggestion?
                    Zakkr




Re: [HACKERS] _text problem in union

От
Bruce Momjian
Дата:
> 
>  Hi,
> 
>  I have small problem with text array in union query..     see:
> 
> 
> abil=> select 5 union select 5;
> ?column?
> --------
>        5
> (1 row)
> 
> abil=> select 5 union select 6;
> ?column?
> --------
>        5
>        6
> (2 rows)
> 
> abil=> select '{"aaa"}'::_text union select '{"aaa"}'::_text;
> ?column?
> --------
> {"aaa"} 
> (1 row)
> 
> abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> ERROR:  Unable to identify an ordering operator '<' for type '_text'
>         Use an explicit ordering operator or modify the query
> abil=> 

Good problem description.  Seems we can't compare arrays of text fields.

Seems if we have an array of text fields, we could compare each element
one-by-one using the base type until we get a comparison result.

Not sure if this should make the TODO list or not.

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: [HACKERS] _text problem in union

От
Hannu Krosing
Дата:
Bruce Momjian wrote:
>
> > abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> > ERROR:  Unable to identify an ordering operator '<' for type '_text'
> >         Use an explicit ordering operator or modify the query
> > abil=>
>
> Good problem description.  Seems we can't compare arrays of text fields.
>
> Seems if we have an array of text fields, we could compare each element
> one-by-one using the base type until we get a comparison result.
>
> Not sure if this should make the TODO list or not.

It woulf be better to have a generic array compare op, that just
traverses
both arrays comparing them with the "<" for base type

--------------
Hannu


Re: [HACKERS] _text problem in union

От
Bruce Momjian
Дата:
> Bruce Momjian wrote:
> > 
> > > abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> > > ERROR:  Unable to identify an ordering operator '<' for type '_text'
> > >         Use an explicit ordering operator or modify the query
> > > abil=>
> > 
> > Good problem description.  Seems we can't compare arrays of text fields.
> > 
> > Seems if we have an array of text fields, we could compare each element
> > one-by-one using the base type until we get a comparison result.
> > 
> > Not sure if this should make the TODO list or not.
> 
> It woulf be better to have a generic array compare op, that just
> traverses 
> both arrays comparing them with the "<" for base type

Yes, that was my idea.  Is this a worthy TODO item?

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: [HACKERS] _text problem in union

От
Tom Lane
Дата:
Zakkr <zakkr@zf.jcu.cz> writes:
> abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> ERROR:  Unable to identify an ordering operator '<' for type '_text'
>         Use an explicit ordering operator or modify the query

Depending on what you're trying to do, UNION ALL might be an adequate
workaround.  UNION is defined to remove duplicates, so it has to sort
the results of the union'ed queries, which requires an ordering
operator.  UNION ALL just appends the two query results together...

In the long run we probably ought to think about providing ordering
operators for array types.
        regards, tom lane


Re: [HACKERS] _text problem in union

От
Thomas Lockhart
Дата:
> > It woulf be better to have a generic array compare op, that just
> > traverses both arrays comparing them with the "<" for base type
> Yes, that was my idea.  Is this a worthy TODO item?

Sure. There should be a fairly large list of things for arrays, which
have not quite gotten the same attention as other Postgres features.
                - Thomas

-- 
Thomas Lockhart                lockhart@alumni.caltech.edu
South Pasadena, California


Re: [HACKERS] _text problem in union

От
Bruce Momjian
Дата:
> Zakkr <zakkr@zf.jcu.cz> writes:
> > abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> > ERROR:  Unable to identify an ordering operator '<' for type '_text'
> >         Use an explicit ordering operator or modify the query
> 
> Depending on what you're trying to do, UNION ALL might be an adequate
> workaround.  UNION is defined to remove duplicates, so it has to sort
> the results of the union'ed queries, which requires an ordering
> operator.  UNION ALL just appends the two query results together...
> 
> In the long run we probably ought to think about providing ordering
> operators for array types.
> 

Added to TODO:
* Allow arrays to be ORDER'ed

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


Re: [HACKERS] _text problem in union

От
Zakkr
Дата:

On Mon, 27 Sep 1999, Tom Lane wrote:

> Zakkr <zakkr@zf.jcu.cz> writes:
> > abil=> select '{"aaa"}'::_text union select '{"bbb"}'::_text;
> > ERROR:  Unable to identify an ordering operator '<' for type '_text'
> >         Use an explicit ordering operator or modify the query
> 
> Depending on what you're trying to do, UNION ALL might be an adequate
> workaround.  UNION is defined to remove duplicates, so it has to sort
> the results of the union'ed queries, which requires an ordering
> operator.  UNION ALL just appends the two query results together...
> 

Yes, UNION ALL is good resolution for me. Thank Tom.

> In the long run we probably ought to think about providing ordering
> operators for array types.
..hmm :-))