Search Postgresql Archives

Re: Surprising results from array concatenation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 25, 2017 at 9:26 AM, Mike Blackwell <mike.blackwell@xxxxxxx> wrote:
The docs (section 9.18 for PG 9.6) show as an example for array concatenation

ARRAY[4,5,6] || 7

which works fine.  However, trying the same with an array of text doesn't work:

# select array['a','b','c'] || 'd';
ERROR:  malformed array literal: "d"
LINE 1: select array['a','b','c'] || 'd';
                                     ^
DETAIL:  Array value must start with "{" or dimension information.

Casting the second value to TEXT works.

# select array['a','b','c'] || 'd'::TEXT;
 ?column?  
-----------
 {a,b,c,d}
(1 row)

The assumption that the second argument is an array constant seems surprising

​It has to assume something.  And for better and worse it has to assume it without looking at the actual value.​  Choosing the scalar variant here would be more convenient but choosing the same type as the left-hand side is logical.  Note that the concatenation operator/function isn't the one complaining - if it was then intelligence could be inserted.  The type conversion code doesn't have the luxury.

I don't suppose one would get far arguing to modify the array input function to convert a value that doesn't look like an array into a single element text array.  The "implicit conversion" that involves is something we've gotten away from and seems like it would be worse that requiring the explicit typing.

David J.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux