Hi!

On Wed, Mar 21, 2018 at 2:30 PM, Darafei "Komяpa" Praliaskouski <
m...@komzpa.net> wrote:

> on a PostGIS system tuned for preferring parallelism heavily (
> min_parallel_table_scan_size=10kB) we experience issues with QGIS table
> discovery query with this patch:
>
> Failing query is:
> [local] gis@gis=# SELECT l.f_table_name,l.f_table_
> schema,l.f_geometry_column,upper(l.type),l.srid,l.coord_
> dimension,c.relkind,obj_description(c.oid) FROM geometry_columns
> l,pg_class c,pg_namespace n WHERE c.relname=l.f_table_name AND
> l.f_table_schema=n.
> nspname AND n.oid=c.relnamespace AND has_schema_privilege(n.nspname,'usage')
> AND has_table_privilege('"'||n.nspname||'"."'||c.relname||'"','select')
> AND l.f_table_schema='public' ORDER BY 
> n.nspname,c.relname,l.f_geometry_column;
>
> ERROR:  XX000: badly formatted node string "INCREMENTALSORT :startup_cost
> 37"...
> CONTEXT:  parallel worker
> LOCATION:  parseNodeString, readfuncs.c:2693
> Time: 42,052 ms
>
>
> Query plan:
>
>
>                                                   QUERY PLAN
>
>
> ────────────────────────────────────────────────────────────
> ────────────────────────────────────────────────────────────
> ────────────────────────────────────────────────────────────
> ────────────────────────────────────────────────────────────
> ──────────────────
> Sort  (cost=38717.21..38717.22 rows=1 width=393)
>   Sort Key: c_1.relname, a.attname
>   ->  Nested Loop  (cost=36059.35..38717.20 rows=1 width=393)
>         ->  Index Scan using pg_namespace_nspname_index on pg_namespace n
> (cost=0.28..2.30 rows=1 width=68)
>               Index Cond: (nspname = 'public'::name)
>               Filter: has_schema_privilege((nspname)::text, 'usage'::text)
>         ->  Nested Loop  (cost=36059.08..38714.59 rows=1 width=407)
>               ->  Nested Loop Left Join  (cost=36058.65..38712.12 rows=1
> width=334)
>                     Join Filter: ((s_2.connamespace = n_1.oid) AND
> (a.attnum = ANY (s_2.conkey)))
>                     ->  Nested Loop Left Join  (cost=36058.51..38711.94
> rows=1 width=298)
>                           Join Filter: ((s_1.connamespace = n_1.oid) AND
> (a.attnum = ANY (s_1.conkey)))
>                           ->  Nested Loop  (cost=36058.38..38711.75 rows=1
> width=252)
>                                 Join Filter: (a.atttypid = t.oid)
>                                 ->  Gather Merge  (cost=36057.95..38702.65
> rows=444 width=256)
>                                       Workers Planned: 10
>                                       ->  Merge Left Join
> (cost=35057.76..37689.01 rows=44 width=256)
>                                             Merge Cond: ((n_1.oid =
> s.connamespace) AND (c_1.oid = s.conrelid))
>                                             Join Filter: (a.attnum = ANY
> (s.conkey))
>                                             ->  Incremental Sort
> (cost=37687.19..37687.30 rows=44 width=210)
>                                                   Sort Key: n_1.oid,
> c_1.oid
>                                                   Presorted Key: n_1.oid
>                                                   ->  Nested Loop
> (cost=34837.25..37685.99 rows=44 width=210)
>                                                         ->  Merge Join
> (cost=34836.82..34865.99 rows=9 width=136)
>                                                               Merge Cond:
> (c_1.relnamespace = n_1.oid)
>                                                               ->  Sort
> (cost=34834.52..34849.05 rows=5814 width=72)
>                                                                     Sort
> Key: c_1.relnamespace
>                                                                     ->
> Parallel Seq Scan on pg_class c_1  (cost=0.00..34470.99 rows=5814 width=72)
>
> Filter: ((relname <> 'raster_columns'::name) AND (NOT
> pg_is_other_temp_schema(relnamespace)) AND has_table_privilege(oid,
> 'SELECT'::text) AND (relkind = ANY ('{r,v,m,f,p}'::"char"[])))
>                                                               ->  Sort
> (cost=2.30..2.31 rows=1 width=68)
>                                                                     Sort
> Key: n_1.oid
>                                                                     ->
> Index Scan using pg_namespace_nspname_index on pg_namespace n_1
> (cost=0.28..2.29 rows=1 width=68)
>
> Index Cond: (nspname = 'public'::name)
>                                                         ->  Index Scan
> using pg_attribute_relid_attnum_index on pg_attribute a
> (cost=0.43..200.52 rows=11281 width=78)
>                                                               Index Cond:
> (attrelid = c_1.oid)
>                                                               Filter: (NOT
> attisdropped)
>                                             ->  Sort  (cost=1.35..1.35
> rows=1 width=77)
>                                                   Sort Key:
> s.connamespace, s.conrelid
>                                                   ->  Seq Scan on
> pg_constraint s  (cost=0.00..1.34 rows=1 width=77)
>                                                         Filter: (consrc
> ~~* '%geometrytype(% = %'::text)
>                                 ->  Materialize  (cost=0.42..2.45 rows=1
> width=4)
>                                       ->  Index Scan using
> pg_type_typname_nsp_index on pg_type t  (cost=0.42..2.44 rows=1 width=4)
>                                             Index Cond: (typname =
> 'geometry'::name)
>                           ->  Index Scan using
> pg_constraint_conrelid_index on pg_constraint s_1  (cost=0.14..0.16 rows=1
> width=77)
>                                 Index Cond: (conrelid = c_1.oid)
>                                 Filter: (consrc ~~* '%ndims(% = %'::text)
>                     ->  Index Scan using pg_constraint_conrelid_index on
> pg_constraint s_2  (cost=0.14..0.16 rows=1 width=77)
>                           Index Cond: (conrelid = c_1.oid)
>                           Filter: (consrc ~~* '%srid(% = %'::text)
>               ->  Index Scan using pg_class_relname_nsp_index on pg_class
> c  (cost=0.42..2.46 rows=1 width=73)
>                     Index Cond: ((relname = c_1.relname) AND (relnamespace
> = n.oid))
>                     Filter: has_table_privilege((((('"'::text ||
> (n.nspname)::text) || '"."'::text) || (relname)::text) || '"'::text),
> 'select'::text)
> (51 rows)
>

Thank you for pointing.  I'll try to reproduce this issue and fix it.

------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

Reply via email to