Re: [GENERAL] Surprising results from array concatenation - Mailing list pgsql-general

From David G. Johnston
Subject Re: [GENERAL] Surprising results from array concatenation
Date
Msg-id CAKFQuwY=Y4dy5Xhtj4F2De+0vapHi=BFb71GDLUOW6+d065dgw@mail.gmail.com
Whole thread Raw
In response to [GENERAL] Surprising results from array concatenation  (Mike Blackwell <mike.blackwell@rrd.com>)
Responses Re: [GENERAL] Surprising results from array concatenation
List pgsql-general
On Tue, Apr 25, 2017 at 9:26 AM, Mike Blackwell <mike.blackwell@rrd.com> 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.

pgsql-general by date:

Previous
From: Mike Blackwell
Date:
Subject: [GENERAL] Surprising results from array concatenation
Next
From: Tom Lane
Date:
Subject: Re: [GENERAL] Surprising results from array concatenation