Fonksiyona ihtiyaç duymadan başka bir seçenek
update points set country = t1.country from
(
select points.oid, countries.name as country from
countries INNER JOIN points on st_contains(countries.wkb_geometry,points.wkb_geometry)
) t1
where t1.oid = points.oid
(Test etmeme rağmen) bunun, örneğin örneğinizde olduğu gibi iç içe bir işlev kullanmaktan daha hızlı olacağından şüpheleniyorum.
Çalışmamdan elde ettiğim çıktı açıklar (umarım benzer görünürsünüz). Daha fazla Seq Scan sonucunuz varsa, bu bakılması gereken bir şeydir, belki de dizinler düzgün bir şekilde ayarlanmamıştır.
Update on points (cost=1.18..29.40 rows=121 width=129)"
-> Nested Loop (cost=1.18..29.40 rows=121 width=129)"
Join Filter: _st_contains(countries.geometry, public.points.geometry)"
-> Hash Join (cost=1.18..2.37 rows=28 width=220)"
Hash Cond: (public.points.oid = public.points.oid)"
-> Seq Scan on points (cost=0.00..1.08 rows=28 width=114)"
-> Hash (cost=1.08..1.08 rows=28 width=110)"
-> Seq Scan on points (cost=0.00..1.08 rows=28 width=110)"
-> Index Scan using "countries_Idx" on countries (cost=0.00..0.91 rows=1 width=414)"
Index Cond: (geometry && public.points.geometry)"