Re: Multi-dimensional arrays

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: rod(at)iol(dot)ie
Cc: Thom Brown <thom(at)linux(dot)com>, PostgreSQL <pgsql-general(at)postgresql(dot)org>
Subject: Re: Multi-dimensional arrays
Date: 2014-03-15 16:21:41
Message-ID: 20797.1394900501@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"Raymond O'Donnell" <rod(at)iol(dot)ie> writes:
> On 15/03/2014 14:01, Thom Brown wrote:
>> On 15 March 2014 12:51, Raymond O'Donnell <rod(at)iol(dot)ie> wrote:
>>> Here's an odd one (to me anyway) which I ran into today.... if I have a
>>> multidimensional array, why does the following return NULL?
>>> select (array[['abc','def'], ['ghi','jkl']])[1]

>> Hmm... I'm not sure. You can get to it with slices for some reason:

It's the wrong number of subscripts. It's historical I guess that
we return NULL instead of throwing an error. The general rule is
that a non-slice subscript operation is supposed to return a scalar
(that is, the array element's type), while a slice subscript operation
gives back something of the same array type. So if you don't put a
colon anywhere, you'd better use two subscripts on this 2-D array.

> True... though that gives you a 2D array, whereas I was hoping for a 1D
> array from (array[...])[1].

Postgres does not think of multi-D arrays as being arrays of arrays.
This is problematic mainly because the SQL standard does think of them
that way. I'm not sure if there's any hope of changing it though ---
there's probably too much code that would be broken if we did.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Thom Brown 2014-03-15 17:07:11 Re: Multi-dimensional arrays
Previous Message Raymond O'Donnell 2014-03-15 14:44:59 Re: Multi-dimensional arrays