2016-01-04 2 views
0

Рассмотрим таблицу со следующими строками:PostgreSQL: SELECT функции по всем пунктам в массиве

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 ...) 

Unsurprisingly, функция работает только на элементе, а не на массиве:

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

Собирает в Python жаргоне, я ищу эквивалент print [st_AsText(p) for i in polygons] в PostgreSQL.

Как запустить функцию PostgreSQL для всех элементов массива в инструкции SELECT, a-la Python's list comprehension?

Добавление Я думаю, что это не является строгим дубликат, потому что How to apply a function to each element of an array column in Postgres? обрабатывает встроенный массив (например FROM unnest(ARRAY[1.53224,0.23411234])), в то время как этот вопрос обрабатывает SELECT заявления из таблицы, содержащей столбец массива. Преобразование не тривиально, по крайней мере для меня.

ответ

1

Использование unnest():

SELECT st_AsText(p) 
FROM some_table, unnest(polygons) p 
WHERE id=405; 
Смежные вопросы