PostgreSQL:为数组

时间:2016-01-04 13:43:58

标签: arrays postgresql postgis postgresql-9.3 sql-function

考虑一个包含以下行的表:

id       | bigint
polygons | geometry(Polygon,4326)[]

SELECT - polygons行返回一组不可读的二进制数据:

SELECT polygons FROM some_table WHERE id=405;
{0103000020E61000000100000006000000B84F039E5AC0E375243935C13F402...}

在第一个元素上使用st_AsText会返回一个可读的输出:

SELECT st_AsText(polygons[1]) FROM some_table WHERE id=405;
POLYGON((-106.4689521119 31.7547183717742 ...)

不出所料,该函数仅适用于元素,而不适用于数组:

SELECT st_AsText(polygons) FROM some_table WHERE id=405;
ERROR:  function st_astext(geometry[]) does not exist

把它放在Python术语中,我在PostgreSQL中寻找等价的print [st_AsText(p) for i in polygons]

如何在SELECT语句中对数组的所有元素运行PostgreSQL函数,a-la Python的列表理解?

附录 我认为这不是严格的重复,因为How to apply a function to each element of an array column in Postgres?处理内联数组(例如FROM unnest(ARRAY[1.53224,0.23411234])),而此问题处理来自包含数组列的表的SELECT语句。转换并非微不足道,至少对我而言。

1 个答案:

答案 0 :(得分:2)

使用unnest()

SELECT st_AsText(p) 
FROM some_table, unnest(polygons) p 
WHERE id=405;