explain.depesz.com

PostgreSQL's explain analyze made readable

Result: HNq9

Settings
# exclusive inclusive rows x rows loops node
1. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=101.22..323.43 rows=501 width=32) (actual rows= loops=)

  • Hash Cond: (a.attcollation = co.oid)
2. 0.000 0.000 ↓ 0.0

Hash Join (cost=98.98..313.04 rows=501 width=68) (actual rows= loops=)

  • Hash Cond: (t.typnamespace = nt.oid)
3. 0.000 0.000 ↓ 0.0

Hash Left Join (cost=97.84..305.02 rows=501 width=72) (actual rows= loops=)

  • Hash Cond: (t.typbasetype = bt.oid)
  • Join Filter: (t.typtype = 'd'::"char")
4. 0.000 0.000 ↓ 0.0

Hash Join (cost=59.02..258.06 rows=501 width=77) (actual rows= loops=)

  • Hash Cond: (a.atttypid = t.oid)
5. 0.000 0.000 ↓ 0.0

Hash Join (cost=28.80..220.95 rows=501 width=72) (actual rows= loops=)

  • Hash Cond: (a.attrelid = c.oid)
  • Join Filter: (pg_has_role(c.relowner, 'USAGE'::text) OR has_column_privilege(c.oid, a.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text))
6. 0.000 0.000 ↓ 0.0

Seq Scan on pg_attribute a (cost=0.00..167.55 rows=2,964 width=78) (actual rows= loops=)

  • Filter: ((NOT attisdropped) AND (attnum > 0))
7. 0.000 0.000 ↓ 0.0

Hash (cost=26.82..26.82 rows=159 width=8) (actual rows= loops=)

8. 0.000 0.000 ↓ 0.0

Hash Join (cost=1.13..26.82 rows=159 width=8) (actual rows= loops=)

  • Hash Cond: (c.relnamespace = nc.oid)
9. 0.000 0.000 ↓ 0.0

Seq Scan on pg_class c (cost=0.00..23.20 rows=239 width=12) (actual rows= loops=)

  • Filter: (relkind = ANY ('{r,v,f}'::"char"[]))
10. 0.000 0.000 ↓ 0.0

Hash (cost=1.08..1.08 rows=4 width=4) (actual rows= loops=)

11. 0.000 0.000 ↓ 0.0

Seq Scan on pg_namespace nc (cost=0.00..1.08 rows=4 width=4) (actual rows= loops=)

  • Filter: (NOT pg_is_other_temp_schema(oid))
12. 0.000 0.000 ↓ 0.0

Hash (cost=23.43..23.43 rows=543 width=13) (actual rows= loops=)

13. 0.000 0.000 ↓ 0.0

Seq Scan on pg_type t (cost=0.00..23.43 rows=543 width=13) (actual rows= loops=)

14. 0.000 0.000 ↓ 0.0

Hash (cost=32.03..32.03 rows=543 width=4) (actual rows= loops=)

15. 0.000 0.000 ↓ 0.0

Hash Join (cost=1.14..32.03 rows=543 width=4) (actual rows= loops=)

  • Hash Cond: (bt.typnamespace = nbt.oid)
16. 0.000 0.000 ↓ 0.0

Seq Scan on pg_type bt (cost=0.00..23.43 rows=543 width=8) (actual rows= loops=)

17. 0.000 0.000 ↓ 0.0

Hash (cost=1.06..1.06 rows=6 width=4) (actual rows= loops=)

18. 0.000 0.000 ↓ 0.0

Seq Scan on pg_namespace nbt (cost=0.00..1.06 rows=6 width=4) (actual rows= loops=)

19. 0.000 0.000 ↓ 0.0

Hash (cost=1.06..1.06 rows=6 width=4) (actual rows= loops=)

20. 0.000 0.000 ↓ 0.0

Seq Scan on pg_namespace nt (cost=0.00..1.06 rows=6 width=4) (actual rows= loops=)

21. 0.000 0.000 ↓ 0.0

Hash (cost=2.21..2.21 rows=3 width=4) (actual rows= loops=)

22. 0.000 0.000 ↓ 0.0

Hash Join (cost=1.07..2.21 rows=3 width=4) (actual rows= loops=)

  • Hash Cond: (nco.oid = co.collnamespace)
  • Join Filter: ((nco.nspname <> 'pg_catalog'::name) OR (co.collname <> 'default'::name))
23. 0.000 0.000 ↓ 0.0

Seq Scan on pg_namespace nco (cost=0.00..1.06 rows=6 width=68) (actual rows= loops=)

24. 0.000 0.000 ↓ 0.0

Hash (cost=1.03..1.03 rows=3 width=72) (actual rows= loops=)

25. 0.000 0.000 ↓ 0.0

Seq Scan on pg_collation co (cost=0.00..1.03 rows=3 width=72) (actual rows= loops=)