| The PostgreSQL 9.0 Reference Manual - Volume 1A - SQL Language Reference
by The PostgreSQL Global Development Group Paperback (6"x9"), 454 pages ISBN 9781906966041 RRP £14.95 ($19.95) Sales of this book support the PostgreSQL project! Get a printed copy>>> |
2.2.11 Array Constructors
An array constructor is an expression that builds an
array value using values for its member elements. A simple array
constructor
consists of the key word ARRAY, a left square bracket
[, a list of expressions (separated by commas) for the
array element values, and finally a right square bracket ].
For example:
SELECT ARRAY[1,2,3+4];
array
---------
{1,2,7}
(1 row)
By default,
the array element type is the common type of the member expressions,
determined using the same rules as for UNION or
CASE constructs (see section 8.5 UNION, CASE, and Related Constructs).
You can override this by explicitly casting the array constructor to the
desired type, for example:
SELECT ARRAY[1,2,22.7]::integer[];
array
----------
{1,2,23}
(1 row)
This has the same effect as casting each expression to the array element type individually. For more on casting, see section 2.2.9 Type Casts.
Multidimensional array values can be built by nesting array
constructors.
In the inner constructors, the key word ARRAY can
be omitted. For example, these produce the same result:
SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]];
array
---------------
{{1,2},{3,4}}
(1 row)
SELECT ARRAY[[1,2],[3,4]];
array
---------------
{{1,2},{3,4}}
(1 row)
Since multidimensional arrays must be rectangular, inner constructors
at the same level must produce sub-arrays of identical dimensions.
Any cast applied to the outer ARRAY constructor propagates
automatically to all the inner constructors.
Multidimensional array constructor elements can be anything yielding
an array of the proper kind, not only a sub-ARRAY construct.
For example:
CREATE TABLE arr(f1 int[], f2 int[]);
INSERT INTO arr VALUES (ARRAY[[1,2],[3,4]], ARRAY[[5,6],[7,8]]);
SELECT ARRAY[f1, f2, '{{9,10},{11,12}}'::int[]] FROM arr;
array
------------------------------------------------
{{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}
(1 row)
You can construct an empty array, but since it's impossible to have an array with no type, you must explicitly cast your empty array to the desired type. For example:
SELECT ARRAY[]::integer[];
array
-------
{}
(1 row)
It is also possible to construct an array from the results of a
subquery. In this form, the array constructor is written with the
key word ARRAY followed by a parenthesized (not
bracketed) subquery. For example:
SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE
'bytea%');
?column?
--------------------------------------------------
{2011,1954,1948,1952,1951,1244,1950,2005,1949,1953,2006,31}
(1 row)
The subquery must return a single column. The resulting one-dimensional array will have an element for each row in the subquery result, with an element type matching that of the subquery's output column.
The subscripts of an array value built with ARRAY
always begin with one. For more information about arrays, see
section 6.14 Arrays.
| ISBN 9781906966041 | The PostgreSQL 9.0 Reference Manual - Volume 1A - SQL Language Reference | See the print edition |