Dynamic multi dimensional arrays in SQL

Started by Dane Fosterover 10 years ago2 messagesgeneral
Jump to latest
#1Dane Foster
studdugie@gmail.com

Hello,

I'm trying to dynamically construct a multi dimensional array where the
outer most array's elements are binary arrays. My initial attempt was
something to the effect of:
SELECT ARRAY(SELECT ARRAY[true::text,false::text] FROM
generate_series(1,2));

My expectation is a result of the form: {{true,false},{true,false}}

But it doesn't work. I get the following error instead: "could not find
array type for data type text[]".

The only way I've gotten it to work is to concatenate strings and
explicitly cast the string to an array. It's ugly. I'm hoping the issue is
that I'm doing something wrong and not that string concatenation or a
procedural language are the only solutions.

Any insight into what I'm doing wrong would be appreciated.

Regards,

Dane

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dane Foster (#1)
Re: Dynamic multi dimensional arrays in SQL

Hi

I am afraid, so this functionality is supported only in unreleased
PostgreSQL 9.5

postgres=# SELECT ARRAY(SELECT ARRAY[true::text,false::text] FROM
generate_series(1,2));
┌─────────────────────────────┐
│ array │
╞═════════════════════════════╡
│ {{true,false},{true,false}} │
└─────────────────────────────┘
(1 row)

It is one from new features there.

In previous versions you can to write own custom aggregate function.

Regards

Pavel Stehule

2015-07-10 16:52 GMT+02:00 Dane Foster <studdugie@gmail.com>:

Show quoted text

Hello,

I'm trying to dynamically construct a multi dimensional array where the
outer most array's elements are binary arrays. My initial attempt was
something to the effect of:
SELECT ARRAY(SELECT ARRAY[true::text,false::text] FROM
generate_series(1,2));

My expectation is a result of the form: {{true,false},{true,false}}

But it doesn't work. I get the following error instead: "could not find
array type for data type text[]".

The only way I've gotten it to work is to concatenate strings and
explicitly cast the string to an array. It's ugly. I'm hoping the issue is
that I'm doing something wrong and not that string concatenation or a
procedural language are the only solutions.

Any insight into what I'm doing wrong would be appreciated.

Regards,

Dane