<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hello everyone,<div class=""><br class=""></div><div class="">I just want to report the outcomes of my latest performance research.</div><div class=""><br class=""></div><div class="">Postgres 12.1 and Postgres 12.2 are both restrictively slow in performing our geometry processing queries - no matter what postgis version (3.0.0, 2.5) I use and how the raw data came into the db. Setting jit on or off and/or allow parallel workers and ANALYZE before the queries hasn’t a significant effect on my test query. </div><div class=""><br class=""></div><div class="">I installed Postgres 10.4 with postgis 2.4 on the same machine on a separate cluster and it runs the queries in fraction of time. See explain analyze output below.</div><div class=""><br class=""></div><div class="">I haven’t tested the newly released postgis 3.0.1 since there is no easy installation so far (as long as I see).</div><div class="">As long as I don’t see a clear way to break it down further we will stay with postgres 10.4.</div><div class=""><br class=""></div><div class="">Regards,</div><div class=""><br class=""></div><div class="">Stefan</div><div class=""><br class=""></div><div class="">—————————</div><div class="">NEW SETUP WITH POSTGRES 12.4, POSTGIS 2.4</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">EXPLAIN ANALYZE CREATE TABLE osm_admin_lines_split AS</div><div class="">SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, ST_SubDivide(ST_Collect(ST_ExteriorRing(the_geom)),5000) AS geometry</div><div class="">FROM (SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, (ST_Dump(geometry)).geom AS the_geom FROM osm_admin_areas) AS foo</div><div class="">GROUP BY osm_id, name, admin_level, name_en, name_fr, area, iso, is_in;</div><div class="">                                                                                                      QUERY PLAN</div><div class="">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div><div class=""> ProjectSet  (cost=272668581.44..3513224466.44 rows=612003000000 width=65) (actual time=56997.276..91803.763 rows=739733 loops=1)</div><div class="">   ->  GroupAggregate  (cost=272668581.44..297148701.44 rows=612003000 width=65) (actual time=56997.263..69736.892 rows=611704 loops=1)</div><div class="">         Group Key: osm_admin_areas.osm_id, osm_admin_areas.name, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in</div><div class="">         ->  Sort  (cost=272668581.44..274198588.94 rows=612003000 width=65) (actual time=56997.204..61484.384 rows=708178 loops=1)</div><div class="">               Sort Key: osm_admin_areas.osm_id, osm_admin_areas.name, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in</div><div class="">               Sort Method: external merge  Disk: 4087800kB</div><div class="">               ->  Result  (cost=0.00..162527467.79 rows=612003000 width=65) (actual time=6.103..44923.073 rows=708178 loops=1)</div><div class="">                     ->  ProjectSet  (cost=0.00..3406687.79 rows=612003000 width=65) (actual time=6.095..44633.240 rows=708178 loops=1)</div><div class="">                           ->  Seq Scan on osm_admin_areas  (cost=0.00..190612.03 rows=612003 width=6983) (actual time=0.103..4156.204 rows=611707 loops=1)</div><div class=""> Planning time: 4.031 ms</div><div class=""> Execution time: 193917.392 ms</div><div class="">(11 rows)</div></div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">Am 20.02.2020 um 14:49 schrieb Stefan Duling <<a href="mailto:stefan.duling@mapz.com" class="">stefan.duling@mapz.com</a>>:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Imre,<div class=""><br class=""></div><div class="">thanks for showing the other discussions. It really seems like it’s a very similar problem.</div><div class=""><br class=""></div><div class="">I tried:</div><div class=""><br class=""></div><div class="">- jit = off</div><div class="">- max_parallel_workers_per_gather = 0</div><div class="">- jit = off with max_parallel_workers_per_gather = 0</div><div class="">- ANALYZE osm_admin_areas; before the query</div><div class=""><br class=""></div><div class="">Sadly those options have not the effect to bring the query time close to the old setup with postgres 10</div><div class=""><br class=""></div><div class="">Next ideas I plan to test:</div><div class="">- There is one further difference between the 2 setups: I use Imposm to import the data. On the old setup (postgres10) I use v0.8.1, on the new setup (postgres12) I use v0.10.0. Although the geometry column contains exactly the same data in both setups, it could be worth to test it. Imposm was used by the others in your linked discussions too.</div><div class="">- Try to upgrade Postgres to 12.2</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Stefan</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class=""><blockquote type="cite" class=""><div class="">Am 20.02.2020 um 13:08 schrieb Imre Samu <<a href="mailto:pella.samu@gmail.com" class="">pella.samu@gmail.com</a>>:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Hi Stefan,</div><div class=""><br class=""></div>> I tried Postgis 2.5 on the new setup with Postgres 12.1. I can’t see any significant differences.<div class=""><br class=""></div><div class="">Please re-test with:</div><div class="">-   "ANALYZE  osm_admin_areas; "   AND   " jit=off   max_parallel_workers_per_gather=0" parameters </div><div class="">based on similar problem:  <a href="https://github.com/openstreetmap/osm2pgsql/issues/1045#issuecomment-570165252" class="">https://github.com/openstreetmap/osm2pgsql/issues/1045#issuecomment-570165252</a>  </div><div class="">And check the debugging thread: <a href="https://www.postgresql.org/message-id/flat/16183-64843a4ebc44d9d2%40postgresql.org" class="">https://www.postgresql.org/message-id/flat/16183-64843a4ebc44d9d2%40postgresql.org</a> ( maybe there is a fix )</div><div class=""><br class=""></div><div class="">--------</div><div class=""><br class=""></div><div class="">And is it possible to upgrade to PG12.2 ( from 12.1 ) ? <br class=""></div><div class=""><div class="">- There are lot of fixes : <a href="https://www.postgresql.org/docs/release/12.2/" class="">https://www.postgresql.org/docs/release/12.2/</a></div><div class="">imho:  your old database: <i class=""> "Postgres 10.12"</i> is the latest PG10 ; and it is correct to compare with the latest PG12 )</div><div class=""></div></div><div class=""><br class=""></div><div class="">regards,</div><div class=""> Imre</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Stefan Duling <<a href="mailto:stefan.duling@mapz.com" class="">stefan.duling@mapz.com</a>> ezt írta (időpont: 2020. febr. 20., Cs, 11:36):<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Paul,<br class="">
<br class="">
thanks for your response!<br class="">
<br class="">
I tried Postgis 2.5 on the new setup with Postgres 12.1. I can’t see any significant differences.<br class="">
I also tried to use only one worker per gatherer. Although there is a little improvement, the query time still is doubled compared to the old setup with Postgres 10.<br class="">
<br class="">
Almost all geometry related queries of my data processing pipeline need multiple calculation times while indexing and clustering is faster with Postgres 12.<br class="">
<br class="">
I continue in trying to break it down further.<br class="">
<br class="">
Regards,<br class="">
<br class="">
Stefan<br class="">
<br class="">
—————————<br class="">
<br class="">
NEW SETUP WITH POSTGIS 2.5<br class="">
<br class="">
<br class="">
EXPLAIN ANALYZE CREATE TABLE public.osm_admin_lines_split AS<br class="">
SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, ST_SubDivide(ST_Collect(ST_ExteriorRing(the_geom)),5000) AS geometry<br class="">
FROM (SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, (ST_Dump(geometry)).geom AS the_geom FROM osm_admin_areas) AS foo<br class="">
GROUP BY osm_id, name, admin_level, name_en, name_fr, area, iso, is_in;<br class="">
                                                                                                      QUERY PLAN<br class="">
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br class="">
 ProjectSet  (cost=40703445.82..43928566.78 rows=609088000 width=65) (actual time=51587.707..506619.624 rows=750429 loops=1)<br class="">
   ->  GroupAggregate  (cost=40703445.82..40727809.34 rows=609088 width=65) (actual time=51587.663..67802.117 rows=611704 loops=1)<br class="">
         Group Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
         ->  Sort  (cost=40703445.82..40704968.54 rows=609088 width=65) (actual time=51586.580..57029.848 rows=708178 loops=1)<br class="">
               Sort Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
               Sort Method: external merge  Disk: 4087808kB<br class="">
               ->  Gather  (cost=1000.00..40638832.88 rows=609088 width=65) (actual time=1240.826..35018.389 rows=708178 loops=1)<br class="">
                     Workers Planned: 4<br class="">
                     Workers Launched: 4<br class="">
                     ->  Result  (cost=0.00..40576924.08 rows=152272000 width=65) (actual time=988.020..29198.984 rows=141636 loops=5)<br class="">
                           ->  ProjectSet  (cost=0.00..986204.08 rows=152272000 width=65) (actual time=988.012..29085.994 rows=141636 loops=5)<br class="">
                                 ->  Parallel Seq Scan on osm_admin_areas  (cost=0.00..186014.72 rows=152272 width=6545) (actual time=0.369..5959.617 rows=122341 loops=5)<br class="">
 Planning Time: 14.213 ms<br class="">
 JIT:<br class="">
   Functions: 110<br class="">
   Options: Inlining true, Optimization true, Expressions true, Deforming true<br class="">
   Timing: Generation 39.248 ms, Inlining 649.432 ms, Optimization 2369.206 ms, Emission 1896.395 ms, Total 4954.282 ms<br class="">
 Execution Time: 620994.272 ms<br class="">
(18 rows)<br class="">
<br class="">
—————————<br class="">
<br class="">
NEW SETUP WITH POSTGIS 2.5 AND max_parallel_workers_per_gather = 1<br class="">
<br class="">
<br class="">
EXPLAIN ANALYZE CREATE TABLE public.osm_admin_lines_split AS<br class="">
SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, ST_SubDivide(ST_Collect(ST_ExteriorRing(the_geom)),5000) AS geometry<br class="">
FROM (SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, (ST_Dump(geometry)).geom AS the_geom FROM osm_admin_areas) AS foo<br class="">
GROUP BY osm_id, name, admin_level, name_en, name_fr, area, iso, is_in;<br class="">
                                                                                                      QUERY PLAN<br class="">
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br class="">
 ProjectSet  (cost=95352014.80..98577135.76 rows=609088000 width=65) (actual time=51995.515..493885.155 rows=750429 loops=1)<br class="">
   ->  GroupAggregate  (cost=95352014.80..95376378.32 rows=609088 width=65) (actual time=51995.438..66093.453 rows=611704 loops=1)<br class="">
         Group Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
         ->  Sort  (cost=95352014.80..95353537.52 rows=609088 width=65) (actual time=51995.267..55931.535 rows=708178 loops=1)<br class="">
               Sort Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
               Sort Method: external merge  Disk: 4087808kB<br class="">
               ->  Gather  (cost=1000.00..95287401.86 rows=609088 width=65) (actual time=969.364..38077.753 rows=708178 loops=1)<br class="">
                     Workers Planned: 1<br class="">
                     Workers Launched: 1<br class="">
                     ->  Result  (cost=0.00..95225493.06 rows=358287000 width=65) (actual time=755.966..34508.959 rows=354089 loops=2)<br class="">
                           ->  ProjectSet  (cost=0.00..2070873.06 rows=358287000 width=65) (actual time=755.958..34344.231 rows=354089 loops=2)<br class="">
                                 ->  Parallel Seq Scan on osm_admin_areas  (cost=0.00..188074.87 rows=358287 width=6545) (actual time=4.870..4186.864 rows=305854 loops=2)<br class="">
 Planning Time: 0.310 ms<br class="">
 JIT:<br class="">
   Functions: 53<br class="">
   Options: Inlining true, Optimization true, Expressions true, Deforming true<br class="">
   Timing: Generation 10.729 ms, Inlining 235.111 ms, Optimization 789.374 ms, Emission 455.139 ms, Total 1490.353 ms<br class="">
 Execution Time: 602556.200 ms<br class="">
(18 rows)<br class="">
<br class="">
<br class="">
<br class="">
> Am 19.02.2020 um 12:24 schrieb Paul Ramsey <<a href="mailto:pramsey@cleverelephant.ca" target="_blank" class="">pramsey@cleverelephant.ca</a>>:<br class="">
> <br class="">
> If you can cut this down to a smaller, shorter query that shows the same characteristics, I would like to see it in a profiler to determine if the hot spots have moved. The explain seems more or less structurally the same, which leaves a couple possibilities:<br class="">
> - the st_collect running in parallel is actually an antipattern, (there’s no performance benefit in the collect itself, so the only potential win is in allowing other things under the collect to go parallel)<br class="">
> - one of the other functions in your query has gotten a lot hotter<br class="">
> The external sort is the same size in both cases, so that’s not the issue.<br class="">
> You can probably confirm if parallelism is the problem by just turning it off in pg12 and re-running, see if things get better. set max_workers_per_gather to 1 or one of the other parallel config options.<br class="">
> Thanks for gathering data,<br class="">
> P<br class="">
> <br class="">
>> On Feb 19, 2020, at 5:37 AM, Stefan Duling <<a href="mailto:stefan.duling@mapz.com" target="_blank" class="">stefan.duling@mapz.com</a>> wrote:<br class="">
>> <br class="">
>> Hi everyone,<br class="">
>> <br class="">
>> at the moment I am trying out a new setup for our geo database server. Primarily I upgraded from Postgres and Postgis to newer versions. Beside of the memory both databases run on the same machine setups and contain identical data. Differences are:<br class="">
>> <br class="">
>> OLD SETUP<br class="">
>> <br class="">
>> 16GB RAM<br class="">
>> Postgres 10.12<br class="">
>> Postgis 2.4<br class="">
>> shared_buffers = 4GB<br class="">
>> work_mem = 128MB<br class="">
>> maintenance_work_mem = 1536MB  <br class="">
>> <br class="">
>> NEW SETUP<br class="">
>> <br class="">
>> 32GB RAM<br class="">
>> Postgres 12.1<br class="">
>> Postgis 3.0<br class="">
>> shared_buffers = 6GB<br class="">
>> work_mem = 256MB<br class="">
>> maintenance_work_mem = 3GB<br class="">
>> <br class="">
>> <br class="">
>> Sadly I observe several queries that take multiple times to execute with the new setup. While the most expensive query took ~10h on the old setup, nearly 3 days are needed on the new setup. Currently I am analysing a more lightweight query, that execution time doubled with the new setup.<br class="">
>> <br class="">
>> Can someone help me with the EXPLAIN ANALYZE results? Is Postgres 12 / Postgis 3 slower in general? Is the use of parallel workers ineffective in my use case?<br class="">
>> <br class="">
>> Thanks in advance!<br class="">
>> <br class="">
>> Stefan Duling<br class="">
>> <br class="">
>> —————————<br class="">
>> <br class="">
>> OLD SETUP<br class="">
>> <br class="">
>> EXPLAIN ANALYZE CREATE TABLE osm_admin_lines_split AS<br class="">
>> SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, ST_SubDivide(ST_Collect(ST_ExteriorRing(the_geom)),5000) AS geometry<br class="">
>> FROM (SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, (ST_Dump(geometry)).geom AS the_geom FROM osm_admin_areas) AS foo<br class="">
>> GROUP BY osm_id, name, admin_level, name_en, name_fr, area, iso, is_in;<br class="">
>>                                                                                                     QUERY PLAN<br class="">
>> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br class="">
>> ProjectSet  (cost=274906731.77..3540274986.77 rows=616689000000 width=65) (actual time=97024.487..141100.410 rows=739733 loops=1)<br class="">
>>  ->  GroupAggregate  (cost=274906731.77..299574291.77 rows=616689000 width=65) (actual time=97024.476..118509.455 rows=611704 loops=1)<br class="">
>>        Group Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
>>        ->  Sort  (cost=274906731.77..276448454.27 rows=616689000 width=65) (actual time=97024.431..108902.529 rows=708178 loops=1)<br class="">
>>              Sort Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
>>              Sort Method: external merge  Disk: 4087720kB<br class="">
>>              ->  Result  (cost=0.00..163888355.59 rows=616689000 width=65) (actual time=42.029..84168.985 rows=708178 loops=1)<br class="">
>>                    ->  ProjectSet  (cost=0.00..3549215.58 rows=616689000 width=65) (actual time=42.019..83866.290 rows=708178 loops=1)<br class="">
>>                          ->  Seq Scan on osm_admin_areas  (cost=0.00..308514.89 rows=616689 width=6931) (actual time=16.288..9536.779 rows=611707 loops=1)<br class="">
>> Planning time: 0.364 ms<br class="">
>> Execution time: 244169.613 ms<br class="">
>> (11 rows)<br class="">
>> <br class="">
>> —————————<br class="">
>> <br class="">
>> NEW SETUP<br class="">
>> <br class="">
>> EXPLAIN ANALYZE CREATE TABLE public.osm_admin_lines_split AS<br class="">
>> SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, ST_SubDivide(ST_Collect(ST_ExteriorRing(the_geom)),5000) AS geometry<br class="">
>> FROM (SELECT osm_id, name, admin_level, name_en, name_fr, area, iso, is_in, (ST_Dump(geometry)).geom AS the_geom FROM osm_admin_areas) AS foo<br class="">
>> GROUP BY osm_id, name, admin_level, name_en, name_fr, area, iso, is_in;<br class="">
>>                                                                                                     QUERY PLAN<br class="">
>> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br class="">
>> ProjectSet  (cost=390996247.38..409798165.99 rows=620679000 width=65) (actual time=38272.152..512018.424 rows=750429 loops=1)<br class="">
>>  ->  GroupAggregate  (cost=390996247.38..391174692.59 rows=620679 width=65) (actual time=38272.119..58302.727 rows=611704 loops=1)<br class="">
>>        Group Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
>>        ->  Sort  (cost=390996247.38..390997799.08 rows=620679 width=65) (actual time=38272.021..46632.706 rows=708178 loops=1)<br class="">
>>              Sort Key: osm_admin_areas.osm_id, <a href="http://osm_admin_areas.name/" rel="noreferrer" target="_blank" class="">osm_admin_areas.name</a>, osm_admin_areas.admin_level, osm_admin_areas.name_en, osm_admin_areas.name_fr, osm_admin_areas.area, osm_admin_areas.iso, osm_admin_areas.is_in<br class="">
>>              Sort Method: external merge  Disk: 4087328kB<br class="">
>>              ->  Gather  (cost=1000.00..390930320.45 rows=620679 width=65) (actual time=1035.032..23429.953 rows=708178 loops=1)<br class="">
>>                    Workers Planned: 4<br class="">
>>                    Workers Launched: 4<br class="">
>>                    ->  Result  (cost=0.00..390867252.55 rows=155170000 width=65) (actual time=817.294..20634.253 rows=141636 loops=5)<br class="">
>>                          ->  ProjectSet  (cost=0.00..1390552.55 rows=155170000 width=65) (actual time=817.287..20546.850 rows=141636 loops=5)<br class="">
>>                                ->  Parallel Seq Scan on osm_admin_areas  (cost=0.00..226001.70 rows=155170 width=6702) (actual time=0.381..3937.298 rows=122341 loops=5)<br class="">
>> Planning Time: 13.173 ms<br class="">
>> JIT:<br class="">
>>  Functions: 110<br class="">
>>  Options: Inlining true, Optimization true, Expressions true, Deforming true<br class="">
>>  Timing: Generation 27.663 ms, Inlining 580.814 ms, Optimization 2265.257 ms, Emission 1222.527 ms, Total 4096.260 ms<br class="">
>> Execution Time: 629042.211 ms<br class="">
>> (18 rows)<br class="">
>> _______________________________________________<br class="">
>> postgis-users mailing list<br class="">
>> <a href="mailto:postgis-users@lists.osgeo.org" target="_blank" class="">postgis-users@lists.osgeo.org</a><br class="">
>> <a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank" class="">https://lists.osgeo.org/mailman/listinfo/postgis-users</a><br class="">
> <br class="">
> _______________________________________________<br class="">
> postgis-users mailing list<br class="">
> <a href="mailto:postgis-users@lists.osgeo.org" target="_blank" class="">postgis-users@lists.osgeo.org</a><br class="">
> <a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank" class="">https://lists.osgeo.org/mailman/listinfo/postgis-users</a><br class="">
<br class="">
_______________________________________________<br class="">
postgis-users mailing list<br class="">
<a href="mailto:postgis-users@lists.osgeo.org" target="_blank" class="">postgis-users@lists.osgeo.org</a><br class="">
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank" class="">https://lists.osgeo.org/mailman/listinfo/postgis-users</a></blockquote></div>
_______________________________________________<br class="">postgis-users mailing list<br class=""><a href="mailto:postgis-users@lists.osgeo.org" class="">postgis-users@lists.osgeo.org</a><br class=""><a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" class="">https://lists.osgeo.org/mailman/listinfo/postgis-users</a></div></blockquote></div><br class=""></div></div>_______________________________________________<br class="">postgis-users mailing list<br class=""><a href="mailto:postgis-users@lists.osgeo.org" class="">postgis-users@lists.osgeo.org</a><br class="">https://lists.osgeo.org/mailman/listinfo/postgis-users</div></blockquote></div><br class=""></div></body></html>