[postgis-users] Query crashed
Paul Ramsey
pramsey at refractions.net
Sat Nov 19 21:39:56 PST 2005
We'll wait until Mark gets back on the list and comments, probably a
problem with the function(geometry) && geometry construction and the
index selectivity calculation. Mark was working on spatial join
selectivity a couple months ago, but this might be a case he did not
anticipate.
P
On 19-Nov-05, at 4:38 PM, Stephen Woodbridge wrote:
> Paul,
>
> Thank you for the help and suggestions. max_distance() sounds like
> a good way around the crash problem, but I get ...
>
> canada=# select count(*)
> canada-# from
> canada-# roadseg r, streets s
> canada-# where
> canada-# expand(r.the_geom, 0.00007) && s.the_geom and
> canada-# max_distance(s.the_geom, r.the_geom) < 0.00007;
> NOTICE: LWGEOM_gist_joinsel called with arguments that are not
> column references
> ERROR: This function is unimplemented yet
>
> I have the function defined in my database as:
>
> CREATE OR REPLACE FUNCTION max_distance(geometry, geometry)
> RETURNS float8 AS
> '/usr/local/lib/liblwgeom.so.1', 'LWGEOM_maxdistance2d_linestring'
> LANGUAGE 'c' IMMUTABLE STRICT;
> ALTER FUNCTION max_distance(geometry, geometry) OWNER TO pgsql;
>
> -Steve
>
> Paul Ramsey wrote:
>> Just realized, there is a max_distance() function in PostGIS, so
>> you can make replace the within(buffer()) call with something
>> much faster that is almost semantically equivalent:
>> select count(*)
>> from
>> roadseg r, streets s
>> where
>> expand(r.the_geom, 0.00007) && s.the_geom and
>> max_distance(s.the_geom, r.the_geom) < 0.00007;
>> The semantics of max_distance are here:
>> <http://postgis.refractions.net/pipermail/postgis-users/2002-
>> January/ 000554.html>
>> P.
>> On 19-Nov-05, at 2:29 PM, Paul Ramsey wrote:
>>> Well, you crashed the backend... probably with the buffer(),
>>> though the gist_joinsel error is oddball. Oh, your GEOS is
>>> quite over a year old and a lot of bugs have been scrubbed since
>>> then, so an upgrade there would help in general.
>>>
>>> Finally, your query syntax is hell, here is why:
>>>
>>> buffer(foo) && somethingelse
>>> you are doing an incredibly expensive geometry operation
>>> (buffer ()) and then only comparing the bounding box! use expand
>>> () instead
>>>
>>> within(something,buffer(foo))
>>> well, I see what you are doing here, and there is currently no
>>> other way. you are looking for items which are "mostly equal" to
>>> other items. that is, they may have had some coordinate drift
>>> do to rounding errors, or been noded in places, or had some
>>> vertices added or removed, but they basically describe the same
>>> line on the ground. what is really needed is a kindaequals
>>> (geom_a,geom_b,tolerance) function that returns a number of
>>> values, depending on the equality case: 1 = completely equal, 2
>>> = describe the same line within tolerance, 3 = geom_a is same as
>>> geom_b but shorter, 4 = geom_b is same as geom_a but shorter.
>>>
>>> P.
>>>
>>> On 19-Nov-05, at 1:56 PM, Stephen Woodbridge wrote:
>>>
>>>> Hi all,
>>>>
>>>> I was running the following query:
>>>>
>>>> select count(*)
>>>> from
>>>> roadseg r, streets s
>>>> where
>>>> buffer(r.the_geom, 0.00007) && s.the_geom and
>>>> within(s.the_geom, buffer(r.the_geom, 0.00007));
>>>>
>>>> And it crashed with the following error message after running
>>>> for 1,959,844 ms in pgadmin3:
>>>>
>>>> NOTICE: LWGEOM_gist_joinsel called with arguments that are not
>>>> column references
>>>> server closed the connection unexpectedly
>>>> This probably means the server terminated abnormally
>>>> before or while processing the request.
>>>>
>>>> The "roadseg" table is the geobase roadseg data for all
>>>> provinces loaded into a table and the "streets" is the same for
>>>> the Census streets data for all provinces.
>>>>
>>>> postgis_full_version() reports:
>>>> POSTGIS="1.0.4"
>>>> GEOS="2.0.1"
>>>> PROJ="Rel. 4.4.9, 29 Oct 2004"
>>>> USE_STATS DBPROC="0.3.0"
>>>> RELPROC="0.3.0"
>>>>
>>>> and version() reports:
>>>>
>>>> "PostgreSQL 8.0.4 on i386-portbld-freebsd5.3, compiled by GCC
>>>> cc (GCC) 3.4.2 [FreeBSD] 20040728"
>>>>
>>>> Any ideas on what this is about. All the data was loaded via
>>>> shp2pgsql.
>>>>
>>>> Thanks,
>>>> -Steve
>>>> _______________________________________________
>>>> postgis-users mailing list
>>>> postgis-users at postgis.refractions.net
>>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>
>>>
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at postgis.refractions.net
>>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
> _______________________________________________
> 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