Re: Array string casts with SELECT but not SELECT DISTINCT

Поиск
Список
Период
Сортировка
От sridhar bamandlapally
Тема Re: Array string casts with SELECT but not SELECT DISTINCT
Дата
Msg-id CAGuFTBUiWJcByQWfue+NuVmik9WYhy=9PMyaPXx7ZQYkNpV5GQ@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Array string casts with SELECT but not SELECT DISTINCT  (Ken Tanzer <ken.tanzer@gmail.com>)
Ответы Re: Array string casts with SELECT but not SELECT DISTINCT  (Ken Tanzer <ken.tanzer@gmail.com>)
Список pgsql-general
Hi

Please see below, this works, way for implicit type casting

bns=# CREATE TEMP TABLE foo (my_array varchar[]);
CREATE TABLE
bns=#
bns=# INSERT INTO foo (my_array) SELECT '{TEST}';
INSERT 0 1
bns=#
bns=# SELECT my_array[1],array_length(my_array,1) FROM foo;
 my_array | array_length
----------+--------------
 TEST     |            1
(1 row)

bns=#
bns=# INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}';
ERROR:  column "my_array" is of type character varying[] but expression is of type text
LINE 1: INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}';
                                                   ^
HINT:  You will need to rewrite or cast the expression.
bns=#
bns=# CREATE CAST (text AS varchar[]) WITH INOUT AS IMPLICIT;
CREATE CAST
bns=#
bns=# INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}';            ---- this works
INSERT 0 1
bns=#
bns=#


in previous mail, sorry for not mentioning varchar"[]"

We did type cast implicit method to avoid application code changes for Oracle to PostgreSQL compatible

Thanks
Sridhar BN



On Sat, Feb 21, 2015 at 9:38 AM, Ken Tanzer <ken.tanzer@gmail.com> wrote:
I'm not able to run this unless I'm the Postgres super user.  But if I run it as such, it tells me that cast already exists anyway.

CREATE CAST (text AS varchar) WITH INOUT AS IMPLICIT;
ERROR:  cast from type text to type character varying already exists

Of course this will work fine:
INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}'::varchar[];

I was mostly surprised by having DISTINCT added to a SELECT make things break.  It may be too obscure an issue to be worth adding, but nothing on the DISTINCT documentation suggests this possibility.

"If DISTINCT is specified, all duplicate rows are removed from the result set..."

Cheers,
Ken

On Fri, Feb 20, 2015 at 6:30 PM, sridhar bamandlapally <sridhar.bn1@gmail.com> wrote:
>>>ERROR:  column "my_array" is of type character varying[] but expression is of type text

please try this below, may be this should help

CREATE CAST (text AS varchar) WITH INOUT AS IMPLICIT;

just for info:
actually this should be available in default


On Fri, Feb 20, 2015 at 9:48 AM, Ken Tanzer <ken.tanzer@gmail.com> wrote:
Hi.  Here's a boiled down example of something that caught me by surprise:

ag_reach_test=> CREATE TEMP TABLE foo (my_array varchar[]);
CREATE TABLE
ag_reach_test=> INSERT INTO foo (my_array) SELECT '{TEST}';
INSERT 0 1
ag_reach_test=> SELECT my_array[1],array_length(my_array,1) FROM foo;
 my_array | array_length 
----------+--------------
 TEST     |            1
(1 row)

ag_reach_test=> INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}';
ERROR:  column "my_array" is of type character varying[] but expression is of type text
LINE 1: INSERT INTO foo (my_array) SELECT DISTINCT '{TEST}';
                                                   ^
HINT:  You will need to rewrite or cast the expression.

It's easy enough to add a cast, but I was curious if this was expected and desired behavior.   Thanks.

Ken
 
--
learn more about AGENCY or
follow the discussion.




--
AGENCY Software  
A Free Software data system
By and for non-profits
(253) 245-3801

learn more about AGENCY or
follow the discussion.

В списке pgsql-general по дате отправления:

Предыдущее
От: Arjen Nienhuis
Дата:
Сообщение: Re: Some indexing advice for a Postgres newbie, please?
Следующее
От: Alban Hertroys
Дата:
Сообщение: Re: Query optimization to select rows instead of too many or conditions