EXPLAIN ANALYZE SELECT pg_class.relname,pg_namespace.nspname,pg_attribute.attname,pg_class.relkind FROM pg_attribute,pg_class,pg_namespace WHERE pg_namespace.oid=pg_class.relnamespace AND pg_attribute.attrelid = pg_class.oid AND ( EXISTS (SELECT * FROM pg_type WHERE pg_type.oid=pg_attribute.atttypid AND pg_type.typname IN ('geometry','geography','topogeometry')) OR pg_attribute.atttypid IN (SELECT oid FROM pg_type a WHERE EXISTS (SELECT * FROM pg_type b WHERE a.typbasetype=b.oid AND b.typname IN ('geometry','geography','topogeometry')))) AND has_schema_privilege( pg_namespace.nspname, 'usage' ) AND has_table_privilege( '"' || pg_namespace.nspname || '"."' || pg_class.relname || '"', 'select' ) AND NOT EXISTS (SELECT * FROM geometry_columns WHERE pg_namespace.nspname=f_table_schema AND pg_class.relname=f_table_name) AND pg_class.relkind IN ('v','r'); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=2727.10..3876710.12 rows=7900 width=193) (actual time=124.931..760.761 rows=5215 loops=1) -> Hash Anti Join (cost=383.66..8059.84 rows=1551 width=133) (actual time=34.663..379.947 rows=10020 loops=1) Hash Cond: ((pg_namespace.nspname = (geometry_columns.f_table_schema)::name) AND (pg_class.relname = (geometry_columns.f_table_name)::name)) -> Hash Join (cost=7.84..5234.21 rows=2068 width=133) (actual time=1.372..307.250 rows=18680 loops=1) Hash Cond: (pg_class.relnamespace = pg_namespace.oid) Join Filter: has_table_privilege((((('"'::text || (pg_namespace.nspname)::text) || '"."'::text) || (pg_class.relname)::text) || '"'::text), 'select'::text) -> Seq Scan on pg_class (cost=0.00..4847.43 rows=18519 width=73) (actual time=0.044..80.251 rows=18690 loops=1) Filter: (relkind = ANY ('{v,r}'::"char"[])) -> Hash (cost=7.00..7.00 rows=67 width=68) (actual time=1.227..1.227 rows=158 loops=1) -> Seq Scan on pg_namespace (cost=0.00..7.00 rows=67 width=68) (actual time=0.049..0.957 rows=158 loops=1) Filter: has_schema_privilege((nspname)::text, 'usage'::text) -> Hash (cost=235.53..235.53 rows=9353 width=43) (actual time=33.247..33.247 rows=8998 loops=1) -> Seq Scan on geometry_columns (cost=0.00..235.53 rows=9353 width=43) (actual time=0.023..11.505 rows=8998 loops=1) -> Index Scan using pg_attribute_relid_attnum_index on pg_attribute (cost=2343.43..2494.13 rows=13 width=68) (actual time=0.034..0.036 rows=1 loops=10020) Index Cond: (pg_attribute.attrelid = pg_class.oid) Filter: ((alternatives: SubPlan 1 or hashed SubPlan 2) OR (hashed SubPlan 3)) SubPlan 1 -> Index Scan using pg_type_oid_index on pg_type (cost=0.00..8.28 rows=1 width=0) (never executed) Index Cond: (oid = $0) Filter: (typname = ANY ('{geometry,geography,topogeometry}'::name[])) SubPlan 2 -> Bitmap Heap Scan on pg_type (cost=12.88..61.28 rows=13 width=4) (actual time=0.137..0.139 rows=2 loops=1) Recheck Cond: (typname = ANY ('{geometry,geography,topogeometry}'::name[])) -> Bitmap Index Scan on pg_type_typname_nsp_index (cost=0.00..12.88 rows=13 width=0) (actual time=0.124..0.124 rows=2 loops=1) Index Cond: (typname = ANY ('{geometry,geography,topogeometry}'::name[])) SubPlan 3 -> Hash Join (cost=61.60..2205.33 rows=55243 width=4) (actual time=85.550..85.550 rows=0 loops=1) Hash Cond: (a.typbasetype = b.oid) -> Seq Scan on pg_type a (cost=0.00..1936.43 rows=55243 width=8) (actual time=0.028..54.350 rows=56151 loops=1) -> Hash (cost=61.44..61.44 rows=13 width=4) (actual time=0.043..0.043 rows=2 loops=1) -> HashAggregate (cost=61.31..61.44 rows=13 width=4) (actual time=0.038..0.040 rows=2 loops=1) -> Bitmap Heap Scan on pg_type b (cost=12.88..61.28 rows=13 width=4) (actual time=0.025..0.027 rows=2 loops=1) Recheck Cond: (typname = ANY ('{geometry,geography,topogeometry}'::name[])) -> Bitmap Index Scan on pg_type_typname_nsp_index (cost=0.00..12.88 rows=13 width=0) (actual time=0.020..0.020 rows=2 loops=1) Index Cond: (typname = ANY ('{geometry,geography,topogeometry}'::name[])) Total runtime: 764.002 ms (36 rows)