I use postgreSQL 9.1. In my database there is a table which looks like
id | ... | values
-----------------------
1 | ... | {1,2,3}
2 | ... | {}
Upon revisiting this question it struck me that this can be simpler and faster.
Reverse the logic of the currently accepted solution by @a_horse:
SELECT id, CASE WHEN values <> '{}' THEN unnest(values) END AS value
FROM tbl
This returns a row with NULL
in value
for an empty array as well as for a NULL
array, because only an array with elements in it produces TRUE
in the test values <> '{}'
.
Works for arrays of any type, since the literal '{}' is automatically coerced to a matching type.
Without explicit ELSE
branch, CASE
returns NULL
, which is what we want anyway.
Arrays with a NULL
elements will return rows regardless.
However. I found an anomaly there and posted a question concerning that:
Turned out to be a bug that was fixed after my report for pg 9.3+.