[postgis-users] cursor
Paragon Corporation
lr at pcorp.us
Fri Sep 11 05:07:15 PDT 2009
Alex,
Here are some questions/suggestions
1) If you are running large datasets and are starting out, try to start with
the newer versions -- lots of speed improvements have been made in PostGIS
1.4+ (some in later 1.3+) such as prepared geometries and so forth
Do a
SELECT postgis_full_version(); -- gives the postgis version
SELECT version(); --gives you postgresql version
2) I presume you have spatial indexes on your geometry fields -- if not put
them in and then
VACUUM ANALYZE osm_poi;
.. other tables
3) Why are you doing this? You probably have a valid reason -- just
wondering why. The reason I ask is generally
speaking when people do queries like this they either want to bulk load for
a different use or they don't know any better
One generally runs a contains query by limiting one side by a non-spatial
field such as the gid or a bounding box so that even when querying huge
tables, the number of results is quite limited and pretty fast to compute
(your tables aren't really that big in size actually -- but your polygons
may be huge which will affect speed a lot as they would have huge bounding
boxes).
It looks like you are trying to match everything with everything else by
containment.
You might have slightly better luck with st_intersects or
ST_Dwithin(a,b,0.0000001) since you are dealing with point and polygon
geometries it will yield the same answer
4) Run an explain
EXPLAIN your_query_here
Leo
-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
Alexander Strunck
Sent: Friday, September 11, 2009 5:49 AM
To: postgis-users at postgis.refractions.net
Subject: [postgis-users] cursor
Hello
i am an newby and i am trying to make a contains query. the problem is that
my tables are to big to pull the query in one (248000 polygon and 105000
points).
my original query:
create table osm_in_50 as SELECT gr.gid, gr.name, gr.feattyp, b.id FROM
buffer_50 AS gr, osm_poi AS b WHERE Contains ( gr.setsrid, b.geom_900913 ) =
TRUE;
i tried to construct a cursor for this and it worked on a small table but
for the big one it doesnt seem to work. it was running for allmost 12 hoers:
declare my_cursor cursor for select * from buffer_50; FETCH FORWARD 1000
FROM my_cursor; declare my_cursor2 cursor for select *from osm_poi; FETCH
FORWARD 1000 FROM my_cursor2; create table osm_in_50 as SELECT gr.gid,
gr.name, gr.feattyp, b.id FROM buffer_50 AS gr, osm_poi AS b WHERE Contains
( gr.setsrid, b.geom_900913 ) = TRUE; close my_cursor2; close my_cursor;
can someone please help me!
alex
--
Jetzt kostenlos herunterladen: Internet Explorer 8 und Mozilla Firefox 3 -
sicherer, schneller und einfacher! http://portal.gmx.net/de/go/atbrowser
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list