Brendan Jurd <dire...@gmail.com> writes: > On 17 March 2013 05:19, Tom Lane <t...@sss.pgh.pa.us> wrote: >> Perhaps not. I think for most uses, a 1-D zero-length array would be >> just as good. I guess what I'd want to know is whether we also need >> to support higher-dimensional zero-size arrays, and if so, what does >> the I/O syntax for those look like?
> If I'm reading right, in our current implementation of array > dimensionality, there can be no such thing as a higher-dimensional > zero-length array anyhow. Postgres doesn't care about how many > dimensions you define for an array, it uses the "quacks like a duck" > test for number of dimensions. For example: > postgres=# SELECT ARRAY[1]::int[][], array_dims(ARRAY[1]::int[][]); > array | array_dims > -------+------------ > {1} | [1:1] Um, this seems to be conflating the issue with a different one, which is that the type system doesn't care how many dimensions arrays have. So "int[]" and "int[][]" are the same type. That's slightly annoying but I'm not sure it's really worth changing. What I'm concerned about here is whether these expressions shouldn't be yielding different data values: regression=# select array[]::int[]; array ------- {} (1 row) regression=# select array[array[]]::int[]; array ------- {} (1 row) regression=# select array[array[],array[]]::int[]; array ------- {} (1 row) Right now, if we did make them produce what they appear to mean, the array I/O functions would have a problem with representing the results: regression=# select '{}'::int[]; int4 ------ {} (1 row) regression=# select '{{}}'::int[]; ERROR: malformed array literal: "{{}}" LINE 1: select '{{}}'::int[]; ^ regression=# select '{{},{}}'::int[]; ERROR: malformed array literal: "{{},{}}" LINE 1: select '{{},{}}'::int[]; ^ So I think we'd need to fix that before we could go very far in this direction. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers