Support multi-dimensional arrays in PL/python

Enterprise / PostgreSQL - Heikki Linnakangas [iki.fi] - 26 October 2016 02:56 UTC

Multi-dimensional arrays can now be used as arguments to a PL/python function (used to throw an error), and they can be returned as nested Python lists.

This makes a backwards-incompatible change to the handling of composite types in arrays. Previously, you could return an array of composite types as "[[col1, col2], [col1, col2]]", but now that is interpreted as a two-dimensional array. Composite types in arrays must now be returned as Python tuples, not lists, to resolve the ambiguity. I.e. "[(col1, col2), (col1, col2)]".

To avoid breaking backwards-compatibility, when not necessary, () is still accepted for arrays at the top-level, but it is always treated as a single-dimensional array. Likewise, [] is still accepted for composite types, when they are not in an array. Update the documentation to recommend using [] for arrays, and () for composite types, with a mention that those other things are also accepted in some contexts.

This needs to be mentioned in the release notes.

Alexey Grishchenko, Dave Cramer and me. Reviewed by Pavel Stehule.

Discussion:

94aceed Support multi-dimensional arrays in PL/python.
doc/src/sgml/plpython.sgml | 41 +++-
src/pl/plpython/expected/plpython_composite.out | 16 +-
src/pl/plpython/expected/plpython_types.out | 151 +++++++++++-
src/pl/plpython/expected/plpython_types_3.out | 151 +++++++++++-
src/pl/plpython/plpy_typeio.c | 279 +++++++++++++++++++----
src/pl/plpython/sql/plpython_composite.sql | 12 +-
src/pl/plpython/sql/plpython_types.sql | 86 +++++++
7 files changed, 673 insertions(+), 63 deletions(-)

Upstream: git.postgresql.org


  • Share