пытаетесь обновить столбец PostGIS the_geom новым, упрощенным the_geom? - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть таблица с многополигонным полем the_geom. Некоторые мультиполигоны были очень подробными, и запросы выполнялись медленно, поэтому я упростил the_geom с помощью st_simplify_preserve_topology. Эта часть была успешной, но теперь я пытаюсь заменить старое поле the_geom новым, но запрос зависает дольше, чем я думал.

Вот то, что я запустил первым, и это быстро, примерно за 60 секунд.

SELECT ST_Multi(ST_SimplifyPreserveTopology(the_geom,0.005)) as fwz_simple FROM fwz;

Затем, когда я пытаюсь обновить таблицу, она запускается и никогда не завершается, примерно через 30 минут ожидания.

UPDATE fwz SET the_geom = subquery.the_geom FROM (SELECT ST_Multi(ST_SimplifyPreserveTopology(the_geom,0.005)) as fwz_simple FROM fwz) as subquery;

Будет ли запрос знать, куда поместить геометрию в контексте целых таблиц? Другими словами, как оператор UPDATE знает, какое имя и т. Д. Поле для выравнивания геометрии? Это то, что вызывает задержку?

Спасибо за любую помощь. Конечно, я могу предоставить более подробную информацию, если это необходимо.

1 Ответ

1 голос
/ 25 апреля 2019

Для каждой строки в вашей таблице вы обновляете геометрию с каждой упрощенной геометрией из подзапроса. В конце все геометрии будут одинаковыми (последняя из подзапроса).

Вы можете пропустить весь подзапрос и напрямую поработать с геометрией каждой строки:

UPDATE fwz 
SET the_geom = ST_Multi(ST_SimplifyPreserveTopology(the_geom,0.005));
...