Вам не нужно "eop_201007 as eop" в вашем ОТ.Будет работать следующее:
UPDATE eop_201007
set coord_x = gi.x_etrs89, coord_y = gi.x_etrs89,gr_type = 4
from geoindex201001 as gi
where eop_201007.cp7=gi.cp7 AND eop_201007.gr_type=0;
Я думаю, что дополнительный eop вызывает перекрестное объединение (в основном это перекрестное произведение двух таблиц, которое ОГРОМНО), поскольку оно не ограничено исходной таблицей eop, котораяуже «автоматически» в списке FROM
Если это не исправит ситуацию, вот некоторые другие мысли:
Возможно, вы сначала захотите провести вакуумный анализ, если у вас нет,Убедитесь, что у вас есть все настройки памяти в postgresql.conf.Рабочая память, общие буферы и т. Д. Могут иметь огромное значение.
Если это одноразовая, а не ночная работа, вы должны отключить fsync.Кроме того, убедитесь, что (если вы выключите fsync), у вас не настроено слишком много сегментов контрольных точек (24 или около того), иначе вы загрязните кэш диска.
Как сказал @Frank Heikens, выследует посмотреть на объяснение.Также отметьте EXPLAIN ANALYZE (если ваш запрос когда-либо завершается).