[postgis-users] Is it possible to do constraint exclusion based on spatial extents?
Stephen Woodbridge
woodbri at swoodbridge.com
Sun Aug 2 14:43:51 PDT 2015
OK, I found this:
http://blog.cleverelephant.ca/2011/02/spatial-partitioning-in-postgis.html
Which leads me to believe that it is not possible, which is too bad,
because this seems like a natural thing we WOULD want to do somehow.
I wonder if it would be possible doing something like:
check((st_x(geom) between xmin and xmax) and (st_y(geom) between ymin
and ymax))
but, I'm not sure how I would expose that in the query to get the check
to kick in.
Regina - Any thoughts on this?
-Steve
On 8/2/2015 4:19 PM, Stephen Woodbridge wrote:
> Hi Remi,
>
> So I got this far, without any success:
>
> -- get the bbox for each table
>
> select st_extent(geom) from rawdata.streets_91;
> -- 'BOX(-87.60196 24.54513,-80.0323 31.00091)'
> select st_extent(geom) from rawdata.streets_92;
> -- 'BOX(-88.47265 30.2251,-80.84104 35.00732)'
> select st_extent(geom) from rawdata.streets_93;
> -- 'BOX(-84.32147 32.08265,-76.02063 36.58729)'
>
> -- set the CHECK constraint (using diagonal line to define bbox)
>
> ALTER TABLE rawdata.streets_91 ADD CONSTRAINT bbox_chk
> CHECK (geom && st_setsrid('LINESTRING(-87.60196 24.54513,-80.0323
> 31.00091)'::text, 4326));
> ALTER TABLE rawdata.streets_92 ADD CONSTRAINT bbox_chk
> CHECK (geom && st_setsrid('LINESTRING(-88.47265 30.2251,-80.84104
> 35.00732)'::text, 4326));
> ALTER TABLE rawdata.streets_93 ADD CONSTRAINT bbox_chk
> CHECK (geom && st_setsrid('LINESTRING(-84.32147 32.08265,-76.02063
> 36.58729)'::text, 4326));
>
> -- turn on constraint exclusion for union and inheritance
> SET constraint_exclusion = partition;
>
> explain select * from rawdata.streets where st_dwithin(geom,
> st_setsrid('POINT(-84.414 33.883)'::geometry, 4326), 50.0/111120.0);
>
> explain select * from rawdata.streets where st_dwithin(geom,
> st_setsrid('POINT(-67.146 18.476)'::geometry, 4326), 50.0/111120.0);
>
> explain select * from rawdata.streets where st_dwithin(geom,
> st_setsrid('POINT(-81.777 24.558)'::geometry, 4326), 50.0/111120.0);
>
> So only the first and third select should hit and they should only hit
> one table based on constraint exclusion.
>
> But I am not showing any checking of constraints in the explain output.
> Maybe it is touchy about the way you set/test the constraints.
>
> Anyone know if this is possible and how to set it up?
>
> Thanks,
> -Steve
>
> On 8/2/2015 3:36 PM, Rémi Cura wrote:
>> Hey,
>> I asked this question to the postgres mailing list here:
>> http://www.postgresql.org/message-id/CAJvUf_szgMLxC4=b6+AgY9HgyPaRes2JVb6bTKXiFF6CXa_epw@mail.gmail.com
>>
>>
>> I would be very interested if you find a solution (I did not).
>>
>> Cheers,
>> Rémi-C
>>
>> 2015-08-02 21:04 GMT+02:00 Stephen Woodbridge <woodbri at swoodbridge.com
>> <mailto:woodbri at swoodbridge.com>>:
>>
>> Hi,
>>
>> I know I can setup table inheritance and constraint exclusion based
>> on say the state field. But I would like to do this based on geom
>> and the table extents. How would I do this?
>>
>> Say for example, I create a roads table, then load data into
>> roads_area1, roads_area2, etc and these inherit from roads.
>>
>> For the state abbrv. I might have:
>>
>> ALTER TABLE roads_area1 ADD CONSTRAINT chk
>> CHECK (state IN ('MA', 'ME', 'NH'));
>>
>> So doing the same based on geom column might look like:
>>
>> ALTER TABLE roads_area1 ADD CONSTRAINT bbox_chk
>> CHECK (geom && <????>);
>>
>> So does this work?
>>
>> Do I need to do anything special to get postgresql to using
>> constraint exclusion? What?
>>
>> How would I set <????>?
>>
>> These tables are create once and query often, so the extents are not
>> changing after they are loaded.
>>
>> Thanks,
>> -Steve W
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org <mailto:postgis-users at lists.osgeo.org>
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>
>>
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list