Re: BUG #14626: array_agg( anyarray ) unexpected error with multi-valued single-dimension array

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: "pgsql-bugs(at)postgresql(dot)org" <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: BUG #14626: array_agg( anyarray ) unexpected error with multi-valued single-dimension array
Date: 2017-04-19 21:32:07
Message-ID: CAKFQuwbRLF0dcqBs6BGU_D4EfuVqOqZX3xoxJdkmiGz3-AxE2A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Wed, Apr 19, 2017 at 1:03 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> david(dot)g(dot)johnston(at)gmail(dot)com writes:
> > This doesn't, and should since the number of elements in the non-empty
> array
> > shouldn't change the dimensionality logic.
>
> > SELECT array_agg(CASE WHEN a = ARRAY[]::text[] THEN ARRAY['N/A']::text[]
> > ELSE a END)
> > FROM ( VALUES (1, ARRAY[]::text[]), (1, ARRAY['1','2']::text[]) ) vals
> (v,
> > a)
>
> Why do you think that should work? You're asking array_agg to accumulate
> a 1-D length-1 array and then a 1-D length-2 array. There's no way to
> make a rectangular 2-D array out of that, except perhaps by inventing
> entries which isn't in array_agg's charter.
>

I was being too narrow-minded in interpreting the word dimension.​

​SELECT array_ndims(ARRAY['1','2']::text[]); => 1; therefore it is a one
dimensional array - having a length of 2. One can, and we do in other
places, define that array as having a dimension of 1x2.

SELECT '{{N/A},{1,2}}'::text[] --> fails with "sub-arrays with matching
dimensions"...

Apparently the annoyance I posted on the other thread isn't so simple to
resolve - just having an empty "1-dimensional" array is not particularly
useful given the length dimension must also match.

This helps explain why my first attempt:

SELECT array_dims('{1,2}'::text[]); --> yields [1:2] which is what is being
keyed off here.

All this and all I really want is a friggin' "array_append / array_concat"
aggregate function that accepts either scalars or matching "primary
dimension" arrays - and treats empty arrays as no-ops.

David J.

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2017-04-19 22:07:49 Re: pg_dump(1) failures when concurrently refreshing mat views
Previous Message Nico Williams 2017-04-19 21:23:56 Re: pg_dump(1) failures when concurrently refreshing mat views