hashjoins, index loops to retrieve pk/ux constrains in pg12

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear All,

We use (a somewhat old version of) Liquibase to implement changes in our databases. We also use Liquibase scripts to keep track of database migration (mostly schema, but a little bit of data too). At some point we cleaned up all our primary indexes as well as constraints and implemented them as Liquibase scripts (i.e., recreated them). For that purpose Liquibase usually fires a query like this to postgres:

SELECT 
	FK.TABLE_NAME       as "TABLE_NAME"
	, CU.COLUMN_NAME    as "COLUMN_NAME"
	, PK.TABLE_NAME     as "REFERENCED_TABLE_NAME"
	, PT.COLUMN_NAME    as "REFERENCED_COLUMN_NAME"
	, C.CONSTRAINT_NAME as "CONSTRAINT_NAME" 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN (   
	SELECT      
		i1.TABLE_NAME
		, i2.COLUMN_NAME
		FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1   
		INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
		WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT ON PT.TABLE_NAME = PK.TABLE_NAME WHERE      
lower(FK.TABLE_NAME)='secrole_condcollection'
Postgres decides to use a hashjoin (see the query plan below) and 20 seconds later spits out 2 rows. It does not matter if one sets random_page_cost to 2, 1.5, or 1.0 (or even 0.09, which does not make any sense) one waits 20 seconds. hashjoin is used to answer this query. If one switches off the hashjoins (set enable_hashjoin = false;), it takes 0.1 second to compute to spit two rows. The views in information_schema are tiny:

select 'REFERENTIAL_CONSTRAINTS', count(1) from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
union all
select 'TABLE_CONSTRAINTS', count(1) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
union all
select 'KEY_COLUMN_USAGE', count(1) from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
union all
select 'TABLE_CONSTRAINTS', count(1) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
REFERENTIAL_CONSTRAINTS	1079
TABLE_CONSTRAINTS	4359
KEY_COLUMN_USAGE	1999
TABLE_CONSTRAINTS	4359

the whole schema eats up 300Kb space:
SELECT pg_size_pretty(sum(pg_total_relation_size(C.oid))) AS "total_size"
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname = 'information_schema'

--344 kB

Any clues how I could "save face of the hash joins"?

Cheers,
Arturas





query plan hash (please note that random_page_cost is overwritten there:
set enable_hashjoin = 1;

SELECT 
	FK.TABLE_NAME       as "TABLE_NAME"
	, CU.COLUMN_NAME    as "COLUMN_NAME"
	, PK.TABLE_NAME     as "REFERENCED_TABLE_NAME"
	, PT.COLUMN_NAME    as "REFERENCED_COLUMN_NAME"
	, C.CONSTRAINT_NAME as "CONSTRAINT_NAME" 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN (   
	SELECT      
		i1.TABLE_NAME
		, i2.COLUMN_NAME
		FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1   
		INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
		WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT ON PT.TABLE_NAME = PK.TABLE_NAME WHERE      
lower(FK.TABLE_NAME)='secrole_condcollection'

Nested Loop  (cost=2174.36..13670.47 rows=1 width=320) (actual time=5499.728..26310.137 rows=2 loops=1)
  Output: "*SELECT* 1".table_name, (a.attname)::information_schema.sql_identifier, "*SELECT* 1_1".table_name, (a_1.attname)::information_schema.sql_identifier, (con.conname)::information_schema.sql_identifier
  Inner Unique: true
  Buffers: shared hit=1961035
  ->  Nested Loop  (cost=2174.07..13670.12 rows=1 width=296) (actual time=5499.716..26310.115 rows=2 loops=1)
        Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, a.attname, r.oid, (information_schema._pg_expandarray(c_1.conkey)), r.relowner
        Inner Unique: true
        Buffers: shared hit=1961029
        ->  Nested Loop  (cost=2173.78..13669.78 rows=1 width=272) (actual time=5499.689..26310.066 rows=2 loops=1)
              Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, r_2.oid, (information_schema._pg_expandarray(c_3.conkey)), r_2.relowner, r.oid, (information_schema._pg_expandarray(c_1.conkey)), r.relowner
              Join Filter: (("*SELECT* 1_2".table_name)::name = ("*SELECT* 1_1".table_name)::name)
              Rows Removed by Join Filter: 1670
              Buffers: shared hit=1961023
              ->  Hash Join  (cost=497.90..5313.80 rows=1 width=104) (actual time=7.586..29.643 rows=836 loops=1)
                    Output: "*SELECT* 1_2".table_name, r.oid, (information_schema._pg_expandarray(c_1.conkey)), r.relowner
                    Hash Cond: (c_1.conname = ("*SELECT* 1_2".constraint_name)::name)
                    Buffers: shared hit=3355
                    ->  ProjectSet  (cost=324.56..1716.71 rows=249000 width=341) (actual time=1.385..21.087 rows=1983 loops=1)
                          Output: r.oid, NULL::name, r.relowner, NULL::name, NULL::name, NULL::oid, c_1.conname, NULL::"char", NULL::oid, NULL::smallint[], NULL::oid, information_schema._pg_expandarray(c_1.conkey)
                          Buffers: shared hit=328
                          ->  Hash Join  (cost=324.56..408.21 rows=249 width=95) (actual time=1.246..6.050 rows=1707 loops=1)
                                Output: c_1.conkey, r.oid, r.relowner, c_1.conname
                                Inner Unique: true
                                Hash Cond: (c_1.connamespace = nc.oid)
                                Buffers: shared hit=328
                                ->  Hash Join  (cost=323.42..405.96 rows=249 width=99) (actual time=1.226..4.977 rows=1707 loops=1)
                                      Output: r.oid, r.relowner, c_1.conname, c_1.conkey, c_1.connamespace
                                      Inner Unique: true
                                      Hash Cond: (r.relnamespace = nr.oid)
                                      Buffers: shared hit=327
                                      ->  Hash Join  (cost=322.30..403.16 rows=374 width=103) (actual time=1.209..3.807 rows=1707 loops=1)
                                            Output: r.oid, r.relowner, r.relnamespace, c_1.conname, c_1.conkey, c_1.connamespace
                                            Inner Unique: true
                                            Hash Cond: (c_1.conrelid = r.oid)
                                            Buffers: shared hit=326
                                            ->  Seq Scan on pg_catalog.pg_constraint c_1  (cost=0.00..76.23 rows=1760 width=95) (actual time=0.006..0.894 rows=1707 loops=1)
                                                  Output: c_1.oid, c_1.conname, c_1.connamespace, c_1.contype, c_1.condeferrable, c_1.condeferred, c_1.convalidated, c_1.conrelid, c_1.contypid, c_1.conindid, c_1.conparentid, c_1.confrelid, c_1.confupdtype, c_1.confdeltype, c_1.confmatchtype, c_1.conislocal, c_1.coninhcount, c_1.connoinherit, c_1.conkey, c_1.confkey, c_1.conpfeqop, c_1.conppeqop, c_1.conffeqop, c_1.conexclop, c_1.conbin
                                                  Filter: (c_1.contype = ANY ('{p,u,f}'::"char"[]))
                                                  Rows Removed by Filter: 2
                                                  Buffers: shared hit=52
                                            ->  Hash  (cost=313.84..313.84 rows=677 width=12) (actual time=1.135..1.136 rows=694 loops=1)
                                                  Output: r.oid, r.relowner, r.relnamespace
                                                  Buckets: 1024  Batches: 1  Memory Usage: 38kB
                                                  Buffers: shared hit=274
                                                  ->  Seq Scan on pg_catalog.pg_class r  (cost=0.00..313.84 rows=677 width=12) (actual time=0.009..1.024 rows=694 loops=1)
                                                        Output: r.oid, r.relowner, r.relnamespace
                                                        Filter: (r.relkind = ANY ('{r,p}'::"char"[]))
                                                        Rows Removed by Filter: 2559
                                                        Buffers: shared hit=274
                                      ->  Hash  (cost=1.07..1.07 rows=4 width=4) (actual time=0.009..0.009 rows=7 loops=1)
                                            Output: nr.oid
                                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                            Buffers: shared hit=1
                                            ->  Seq Scan on pg_catalog.pg_namespace nr  (cost=0.00..1.07 rows=4 width=4) (actual time=0.004..0.006 rows=7 loops=1)
                                                  Output: nr.oid
                                                  Filter: (NOT pg_is_other_temp_schema(nr.oid))
                                                  Rows Removed by Filter: 2
                                                  Buffers: shared hit=1
                                ->  Hash  (cost=1.06..1.06 rows=6 width=4) (actual time=0.008..0.009 rows=9 loops=1)
                                      Output: nc.oid
                                      Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                      Buffers: shared hit=1
                                      ->  Seq Scan on pg_catalog.pg_namespace nc  (cost=0.00..1.06 rows=6 width=4) (actual time=0.003..0.004 rows=9 loops=1)
                                            Output: nc.oid
                                            Buffers: shared hit=1
                    ->  Hash  (cost=173.32..173.32 rows=1 width=128) (actual time=6.192..6.196 rows=595 loops=1)
                          Output: "*SELECT* 1_2".constraint_name, "*SELECT* 1_2".table_name
                          Buckets: 1024  Batches: 1  Memory Usage: 101kB
                          Buffers: shared hit=3027
                          ->  Subquery Scan on "*SELECT* 1_2"  (cost=0.28..173.32 rows=1 width=128) (actual time=0.041..5.955 rows=595 loops=1)
                                Output: "*SELECT* 1_2".constraint_name, "*SELECT* 1_2".table_name
                                Buffers: shared hit=3027
                                ->  Nested Loop  (cost=0.28..173.31 rows=1 width=512) (actual time=0.040..5.849 rows=595 loops=1)
                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_2.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_1.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                      Inner Unique: true
                                      Join Filter: (r_1.relnamespace = nr_1.oid)
                                      Rows Removed by Join Filter: 1836
                                      Buffers: shared hit=3027
                                      ->  Nested Loop  (cost=0.28..172.19 rows=1 width=132) (actual time=0.033..3.736 rows=595 loops=1)
                                            Output: c_2.conname, r_1.relname, r_1.relnamespace
                                            Inner Unique: true
                                            Join Filter: (c_2.connamespace = nc_1.oid)
                                            Rows Removed by Join Filter: 3026
                                            Buffers: shared hit=2432
                                            ->  Nested Loop  (cost=0.28..171.05 rows=1 width=136) (actual time=0.027..1.913 rows=595 loops=1)
                                                  Output: c_2.conname, c_2.connamespace, r_1.relname, r_1.relnamespace
                                                  Inner Unique: true
                                                  Buffers: shared hit=1837
                                                  ->  Seq Scan on pg_catalog.pg_constraint c_2  (cost=0.00..96.05 rows=9 width=72) (actual time=0.012..0.508 rows=595 loops=1)
                                                        Output: c_2.oid, c_2.conname, c_2.connamespace, c_2.contype, c_2.condeferrable, c_2.condeferred, c_2.convalidated, c_2.conrelid, c_2.contypid, c_2.conindid, c_2.conparentid, c_2.confrelid, c_2.confupdtype, c_2.confdeltype, c_2.confmatchtype, c_2.conislocal, c_2.coninhcount, c_2.connoinherit, c_2.conkey, c_2.confkey, c_2.conpfeqop, c_2.conppeqop, c_2.conffeqop, c_2.conexclop, c_2.conbin
                                                        Filter: ((c_2.contype <> ALL ('{t,x}'::"char"[])) AND ((CASE c_2.contype WHEN 'c'::"char" THEN 'CHECK'::text WHEN 'f'::"char" THEN 'FOREIGN KEY'::text WHEN 'p'::"char" THEN 'PRIMARY KEY'::text WHEN 'u'::"char" THEN 'UNIQUE'::text ELSE NULL::text END)::text = 'PRIMARY KEY'::text))
                                                        Rows Removed by Filter: 1114
                                                        Buffers: shared hit=52
                                                  ->  Index Scan using pg_class_oid_index on pg_catalog.pg_class r_1  (cost=0.28..8.33 rows=1 width=72) (actual time=0.002..0.002 rows=1 loops=595)
                                                        Output: r_1.oid, r_1.relname, r_1.relnamespace, r_1.reltype, r_1.reloftype, r_1.relowner, r_1.relam, r_1.relfilenode, r_1.reltablespace, r_1.relpages, r_1.reltuples, r_1.relallvisible, r_1.reltoastrelid, r_1.relhasindex, r_1.relisshared, r_1.relpersistence, r_1.relkind, r_1.relnatts, r_1.relchecks, r_1.relhasrules, r_1.relhastriggers, r_1.relhassubclass, r_1.relrowsecurity, r_1.relforcerowsecurity, r_1.relispopulated, r_1.relreplident, r_1.relispartition, r_1.relrewrite, r_1.relfrozenxid, r_1.relminmxid, r_1.relacl, r_1.reloptions, r_1.relpartbound
                                                        Index Cond: (r_1.oid = c_2.conrelid)
                                                        Filter: ((r_1.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_1.relowner, 'USAGE'::text) OR has_table_privilege(r_1.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_1.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                        Buffers: shared hit=1785
                                            ->  Seq Scan on pg_catalog.pg_namespace nc_1  (cost=0.00..1.06 rows=6 width=4) (actual time=0.000..0.001 rows=6 loops=595)
                                                  Output: nc_1.oid, nc_1.nspname, nc_1.nspowner, nc_1.nspacl
                                                  Buffers: shared hit=595
                                      ->  Seq Scan on pg_catalog.pg_namespace nr_1  (cost=0.00..1.07 rows=4 width=4) (actual time=0.001..0.001 rows=4 loops=595)
                                            Output: nr_1.oid, nr_1.nspname, nr_1.nspowner, nr_1.nspacl
                                            Filter: (NOT pg_is_other_temp_schema(nr_1.oid))
                                            Rows Removed by Filter: 2
                                            Buffers: shared hit=595
              ->  Nested Loop  (cost=1675.88..8355.96 rows=1 width=232) (actual time=9.154..31.424 rows=2 loops=836)
                    Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, r_2.oid, (information_schema._pg_expandarray(c_3.conkey)), r_2.relowner
                    Join Filter: (pkc.conname = ("*SELECT* 1_1".constraint_name)::name)
                    Rows Removed by Join Filter: 8572
                    Buffers: shared hit=1957668
                    ->  Hash Join  (cost=1258.23..6074.13 rows=1 width=232) (actual time=8.894..11.130 rows=2 loops=836)
                          Output: con.conname, pkc.conname, "*SELECT* 1".table_name, r_2.oid, (information_schema._pg_expandarray(c_3.conkey)), r_2.relowner
                          Hash Cond: (c_3.conname = con.conname)
                          Buffers: shared hit=44349
                          ->  ProjectSet  (cost=324.56..1716.71 rows=249000 width=341) (actual time=0.013..10.797 rows=1983 loops=836)
                                Output: r_2.oid, NULL::name, r_2.relowner, NULL::name, NULL::name, NULL::oid, c_3.conname, NULL::"char", NULL::oid, NULL::smallint[], NULL::oid, information_schema._pg_expandarray(c_3.conkey)
                                Buffers: shared hit=43748
                                ->  Hash Join  (cost=324.56..408.21 rows=249 width=95) (actual time=0.007..2.055 rows=1707 loops=836)
                                      Output: c_3.conkey, r_2.oid, r_2.relowner, c_3.conname
                                      Inner Unique: true
                                      Hash Cond: (c_3.connamespace = nc_2.oid)
                                      Buffers: shared hit=43748
                                      ->  Hash Join  (cost=323.42..405.96 rows=249 width=99) (actual time=0.006..1.624 rows=1707 loops=836)
                                            Output: r_2.oid, r_2.relowner, c_3.conname, c_3.conkey, c_3.connamespace
                                            Inner Unique: true
                                            Hash Cond: (r_2.relnamespace = nr_2.oid)
                                            Buffers: shared hit=43747
                                            ->  Hash Join  (cost=322.30..403.16 rows=374 width=103) (actual time=0.006..1.224 rows=1707 loops=836)
                                                  Output: r_2.oid, r_2.relowner, r_2.relnamespace, c_3.conname, c_3.conkey, c_3.connamespace
                                                  Inner Unique: true
                                                  Hash Cond: (c_3.conrelid = r_2.oid)
                                                  Buffers: shared hit=43746
                                                  ->  Seq Scan on pg_catalog.pg_constraint c_3  (cost=0.00..76.23 rows=1760 width=95) (actual time=0.004..0.511 rows=1707 loops=836)
                                                        Output: c_3.oid, c_3.conname, c_3.connamespace, c_3.contype, c_3.condeferrable, c_3.condeferred, c_3.convalidated, c_3.conrelid, c_3.contypid, c_3.conindid, c_3.conparentid, c_3.confrelid, c_3.confupdtype, c_3.confdeltype, c_3.confmatchtype, c_3.conislocal, c_3.coninhcount, c_3.connoinherit, c_3.conkey, c_3.confkey, c_3.conpfeqop, c_3.conppeqop, c_3.conffeqop, c_3.conexclop, c_3.conbin
                                                        Filter: (c_3.contype = ANY ('{p,u,f}'::"char"[]))
                                                        Rows Removed by Filter: 2
                                                        Buffers: shared hit=43472
                                                  ->  Hash  (cost=313.84..313.84 rows=677 width=12) (actual time=0.988..0.989 rows=694 loops=1)
                                                        Output: r_2.oid, r_2.relowner, r_2.relnamespace
                                                        Buckets: 1024  Batches: 1  Memory Usage: 38kB
                                                        Buffers: shared hit=274
                                                        ->  Seq Scan on pg_catalog.pg_class r_2  (cost=0.00..313.84 rows=677 width=12) (actual time=0.006..0.875 rows=694 loops=1)
                                                              Output: r_2.oid, r_2.relowner, r_2.relnamespace
                                                              Filter: (r_2.relkind = ANY ('{r,p}'::"char"[]))
                                                              Rows Removed by Filter: 2559
                                                              Buffers: shared hit=274
                                            ->  Hash  (cost=1.07..1.07 rows=4 width=4) (actual time=0.009..0.010 rows=7 loops=1)
                                                  Output: nr_2.oid
                                                  Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                                  Buffers: shared hit=1
                                                  ->  Seq Scan on pg_catalog.pg_namespace nr_2  (cost=0.00..1.07 rows=4 width=4) (actual time=0.004..0.007 rows=7 loops=1)
                                                        Output: nr_2.oid
                                                        Filter: (NOT pg_is_other_temp_schema(nr_2.oid))
                                                        Rows Removed by Filter: 2
                                                        Buffers: shared hit=1
                                      ->  Hash  (cost=1.06..1.06 rows=6 width=4) (actual time=0.012..0.013 rows=9 loops=1)
                                            Output: nc_2.oid
                                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                            Buffers: shared hit=1
                                            ->  Seq Scan on pg_catalog.pg_namespace nc_2  (cost=0.00..1.06 rows=6 width=4) (actual time=0.007..0.009 rows=9 loops=1)
                                                  Output: nc_2.oid
                                                  Buffers: shared hit=1
                          ->  Hash  (cost=933.65..933.65 rows=1 width=256) (actual time=2.158..2.170 rows=2 loops=1)
                                Output: con.conname, pkc.conname, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                Buffers: shared hit=601
                                ->  Nested Loop  (cost=5.71..933.65 rows=1 width=256) (actual time=1.185..2.163 rows=2 loops=1)
                                      Output: con.conname, pkc.conname, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                      Inner Unique: true
                                      Join Filter: (d2.refobjid = pkc.oid)
                                      Buffers: shared hit=601
                                      ->  Nested Loop  (cost=5.43..933.00 rows=1 width=200) (actual time=1.174..2.146 rows=2 loops=1)
                                            Output: con.conname, con.confrelid, d2.refobjid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                            Buffers: shared hit=593
                                            ->  Nested Loop  (cost=5.15..931.14 rows=1 width=200) (actual time=1.163..2.129 rows=2 loops=1)
                                                  Output: con.conname, con.confrelid, d1.refobjid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                  Buffers: shared hit=587
                                                  ->  Nested Loop  (cost=4.86..929.16 rows=1 width=200) (actual time=1.147..2.108 rows=2 loops=1)
                                                        Output: con.conname, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                        Inner Unique: true
                                                        Join Filter: (con.connamespace = ncon.oid)
                                                        Rows Removed by Join Filter: 10
                                                        Buffers: shared hit=581
                                                        ->  Nested Loop  (cost=4.86..928.02 rows=1 width=204) (actual time=1.143..2.100 rows=2 loops=1)
                                                              Output: con.conname, con.connamespace, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                              Inner Unique: true
                                                              Buffers: shared hit=579
                                                              ->  Nested Loop  (cost=4.58..925.06 rows=2 width=208) (actual time=1.129..2.082 rows=2 loops=1)
                                                                    Output: con.conname, con.connamespace, con.conrelid, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                                    Buffers: shared hit=573
                                                                    ->  Append  (cost=4.30..900.14 rows=3 width=128) (actual time=1.105..2.056 rows=5 loops=1)
                                                                          Buffers: shared hit=560
                                                                          ->  Subquery Scan on "*SELECT* 1"  (cost=4.30..449.91 rows=1 width=128) (actual time=1.104..1.121 rows=3 loops=1)
                                                                                Output: "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                                                Buffers: shared hit=282
                                                                                ->  Nested Loop  (cost=4.30..449.90 rows=1 width=512) (actual time=1.103..1.119 rows=3 loops=1)
                                                                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_4.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_3.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                                                      Inner Unique: true
                                                                                      Join Filter: (c_4.connamespace = nc_3.oid)
                                                                                      Rows Removed by Join Filter: 15
                                                                                      Buffers: shared hit=282
                                                                                      ->  Nested Loop  (cost=4.30..448.76 rows=1 width=132) (actual time=1.096..1.104 rows=3 loops=1)
                                                                                            Output: r_3.relname, c_4.conname, c_4.connamespace
                                                                                            Buffers: shared hit=279
                                                                                            ->  Nested Loop  (cost=0.00..434.55 rows=1 width=68) (actual time=1.062..1.066 rows=1 loops=1)
                                                                                                  Output: r_3.relname, r_3.oid
                                                                                                  Join Filter: (nr_3.oid = r_3.relnamespace)
                                                                                                  Rows Removed by Join Filter: 6
                                                                                                  Buffers: shared hit=275
                                                                                                  ->  Seq Scan on pg_catalog.pg_namespace nr_3  (cost=0.00..1.07 rows=4 width=4) (actual time=0.009..0.015 rows=7 loops=1)
                                                                                                        Output: nr_3.oid, nr_3.nspname, nr_3.nspowner, nr_3.nspacl
                                                                                                        Filter: (NOT pg_is_other_temp_schema(nr_3.oid))
                                                                                                        Rows Removed by Filter: 2
                                                                                                        Buffers: shared hit=1
                                                                                                  ->  Materialize  (cost=0.00..433.36 rows=2 width=72) (actual time=0.004..0.149 rows=1 loops=7)
                                                                                                        Output: r_3.relname, r_3.relnamespace, r_3.oid
                                                                                                        Buffers: shared hit=274
                                                                                                        ->  Seq Scan on pg_catalog.pg_class r_3  (cost=0.00..433.35 rows=2 width=72) (actual time=0.026..1.039 rows=1 loops=1)
                                                                                                              Output: r_3.relname, r_3.relnamespace, r_3.oid
                                                                                                              Filter: ((r_3.relkind = ANY ('{r,p}'::"char"[])) AND (lower(((r_3.relname)::information_schema.sql_identifier)::text) = 'secrole_condcollection'::text) AND (pg_has_role(r_3.relowner, 'USAGE'::text) OR has_table_privilege(r_3.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_3.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                                                              Rows Removed by Filter: 3252
                                                                                                              Buffers: shared hit=274
                                                                                            ->  Bitmap Heap Scan on pg_catalog.pg_constraint c_4  (cost=4.30..14.18 rows=3 width=72) (actual time=0.026..0.029 rows=3 loops=1)
                                                                                                  Output: c_4.oid, c_4.conname, c_4.connamespace, c_4.contype, c_4.condeferrable, c_4.condeferred, c_4.convalidated, c_4.conrelid, c_4.contypid, c_4.conindid, c_4.conparentid, c_4.confrelid, c_4.confupdtype, c_4.confdeltype, c_4.confmatchtype, c_4.conislocal, c_4.coninhcount, c_4.connoinherit, c_4.conkey, c_4.confkey, c_4.conpfeqop, c_4.conppeqop, c_4.conffeqop, c_4.conexclop, c_4.conbin
                                                                                                  Recheck Cond: (c_4.conrelid = r_3.oid)
                                                                                                  Filter: (c_4.contype <> ALL ('{t,x}'::"char"[]))
                                                                                                  Heap Blocks: exact=2
                                                                                                  Buffers: shared hit=4
                                                                                                  ->  Bitmap Index Scan on pg_constraint_conrelid_contypid_conname_index  (cost=0.00..4.30 rows=3 width=0) (actual time=0.020..0.020 rows=3 loops=1)
                                                                                                        Index Cond: (c_4.conrelid = r_3.oid)
                                                                                                        Buffers: shared hit=2
                                                                                      ->  Seq Scan on pg_catalog.pg_namespace nc_3  (cost=0.00..1.06 rows=6 width=4) (actual time=0.002..0.002 rows=6 loops=3)
                                                                                            Output: nc_3.oid, nc_3.nspname, nc_3.nspowner, nc_3.nspacl
                                                                                            Buffers: shared hit=3
                                                                          ->  Subquery Scan on "*SELECT* 2"  (cost=0.29..450.21 rows=2 width=128) (actual time=0.924..0.931 rows=2 loops=1)
                                                                                Output: "*SELECT* 2".table_name, "*SELECT* 2".constraint_name
                                                                                Buffers: shared hit=278
                                                                                ->  Nested Loop  (cost=0.29..450.19 rows=2 width=512) (actual time=0.923..0.929 rows=2 loops=1)
                                                                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (((((((nr_4.oid)::text || '_'::text) || (r_4.oid)::text) || '_'::text) || (a_2.attnum)::text) || '_not_null'::text))::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_4.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                                                      Buffers: shared hit=278
                                                                                      ->  Nested Loop  (cost=0.00..434.55 rows=1 width=72) (actual time=0.904..0.907 rows=1 loops=1)
                                                                                            Output: nr_4.oid, r_4.oid, r_4.relname
                                                                                            Join Filter: (nr_4.oid = r_4.relnamespace)
                                                                                            Rows Removed by Join Filter: 6
                                                                                            Buffers: shared hit=275
                                                                                            ->  Seq Scan on pg_catalog.pg_namespace nr_4  (cost=0.00..1.07 rows=4 width=4) (actual time=0.004..0.007 rows=7 loops=1)
                                                                                                  Output: nr_4.oid, nr_4.nspname, nr_4.nspowner, nr_4.nspacl
                                                                                                  Filter: (NOT pg_is_other_temp_schema(nr_4.oid))
                                                                                                  Rows Removed by Filter: 2
                                                                                                  Buffers: shared hit=1
                                                                                            ->  Materialize  (cost=0.00..433.36 rows=2 width=72) (actual time=0.004..0.128 rows=1 loops=7)
                                                                                                  Output: r_4.oid, r_4.relname, r_4.relnamespace
                                                                                                  Buffers: shared hit=274
                                                                                                  ->  Seq Scan on pg_catalog.pg_class r_4  (cost=0.00..433.35 rows=2 width=72) (actual time=0.021..0.893 rows=1 loops=1)
                                                                                                        Output: r_4.oid, r_4.relname, r_4.relnamespace
                                                                                                        Filter: ((r_4.relkind = ANY ('{r,p}'::"char"[])) AND (lower(((r_4.relname)::information_schema.sql_identifier)::text) = 'secrole_condcollection'::text) AND (pg_has_role(r_4.relowner, 'USAGE'::text) OR has_table_privilege(r_4.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_4.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                                                        Rows Removed by Filter: 3252
                                                                                                        Buffers: shared hit=274
                                                                                      ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a_2  (cost=0.29..15.56 rows=2 width=6) (actual time=0.014..0.015 rows=2 loops=1)
                                                                                            Output: a_2.attrelid, a_2.attname, a_2.atttypid, a_2.attstattarget, a_2.attlen, a_2.attnum, a_2.attndims, a_2.attcacheoff, a_2.atttypmod, a_2.attbyval, a_2.attstorage, a_2.attalign, a_2.attnotnull, a_2.atthasdef, a_2.atthasmissing, a_2.attidentity, a_2.attgenerated, a_2.attisdropped, a_2.attislocal, a_2.attinhcount, a_2.attcollation, a_2.attacl, a_2.attoptions, a_2.attfdwoptions, a_2.attmissingval
                                                                                            Index Cond: ((a_2.attrelid = r_4.oid) AND (a_2.attnum > 0))
                                                                                            Filter: (a_2.attnotnull AND (NOT a_2.attisdropped))
                                                                                            Buffers: shared hit=3
                                                                    ->  Index Scan using pg_constraint_conname_nsp_index on pg_catalog.pg_constraint con  (cost=0.28..8.30 rows=1 width=80) (actual time=0.004..0.004 rows=0 loops=5)
                                                                          Output: con.oid, con.conname, con.connamespace, con.contype, con.condeferrable, con.condeferred, con.convalidated, con.conrelid, con.contypid, con.conindid, con.conparentid, con.confrelid, con.confupdtype, con.confdeltype, con.confmatchtype, con.conislocal, con.coninhcount, con.connoinherit, con.conkey, con.confkey, con.conpfeqop, con.conppeqop, con.conffeqop, con.conexclop, con.conbin
                                                                          Index Cond: (con.conname = ("*SELECT* 1".constraint_name)::name)
                                                                          Filter: (con.contype = 'f'::"char")
                                                                          Rows Removed by Filter: 0
                                                                          Buffers: shared hit=13
                                                              ->  Index Scan using pg_class_oid_index on pg_catalog.pg_class c  (cost=0.28..1.48 rows=1 width=4) (actual time=0.007..0.007 rows=1 loops=2)
                                                                    Output: c.oid, c.relname, c.relnamespace, c.reltype, c.reloftype, c.relowner, c.relam, c.relfilenode, c.reltablespace, c.relpages, c.reltuples, c.relallvisible, c.reltoastrelid, c.relhasindex, c.relisshared, c.relpersistence, c.relkind, c.relnatts, c.relchecks, c.relhasrules, c.relhastriggers, c.relhassubclass, c.relrowsecurity, c.relforcerowsecurity, c.relispopulated, c.relreplident, c.relispartition, c.relrewrite, c.relfrozenxid, c.relminmxid, c.relacl, c.reloptions, c.relpartbound
                                                                    Index Cond: (c.oid = con.conrelid)
                                                                    Filter: (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(c.oid, 'INSERT, UPDATE, REFERENCES'::text))
                                                                    Buffers: shared hit=6
                                                        ->  Seq Scan on pg_catalog.pg_namespace ncon  (cost=0.00..1.06 rows=6 width=4) (actual time=0.002..0.002 rows=6 loops=2)
                                                              Output: ncon.oid, ncon.nspname, ncon.nspowner, ncon.nspacl
                                                              Buffers: shared hit=2
                                                  ->  Index Scan using pg_depend_depender_index on pg_catalog.pg_depend d1  (cost=0.29..1.97 rows=1 width=8) (actual time=0.008..0.009 rows=1 loops=2)
                                                        Output: d1.classid, d1.objid, d1.objsubid, d1.refclassid, d1.refobjid, d1.refobjsubid, d1.deptype
                                                        Index Cond: ((d1.classid = "" AND (d1.objid = con.oid))
                                                        Filter: ((d1.refclassid = '1259'::oid) AND (d1.refobjsubid = 0))
                                                        Rows Removed by Filter: 2
                                                        Buffers: shared hit=6
                                            ->  Index Scan using pg_depend_depender_index on pg_catalog.pg_depend d2  (cost=0.29..1.85 rows=1 width=8) (actual time=0.006..0.007 rows=1 loops=2)
                                                  Output: d2.classid, d2.objid, d2.objsubid, d2.refclassid, d2.refobjid, d2.refobjsubid, d2.deptype
                                                  Index Cond: ((d2.classid = "" AND (d2.objid = d1.refobjid) AND (d2.objsubid = 0))
                                                  Filter: ((d2.refclassid = '2606'::oid) AND (d2.deptype = 'i'::"char"))
                                                  Buffers: shared hit=6
                                      ->  Index Scan using pg_constraint_conrelid_contypid_conname_index on pg_catalog.pg_constraint pkc  (cost=0.28..0.64 rows=1 width=76) (actual time=0.007..0.007 rows=1 loops=2)
                                            Output: pkc.oid, pkc.conname, pkc.connamespace, pkc.contype, pkc.condeferrable, pkc.condeferred, pkc.convalidated, pkc.conrelid, pkc.contypid, pkc.conindid, pkc.conparentid, pkc.confrelid, pkc.confupdtype, pkc.confdeltype, pkc.confmatchtype, pkc.conislocal, pkc.coninhcount, pkc.connoinherit, pkc.conkey, pkc.confkey, pkc.conpfeqop, pkc.conppeqop, pkc.conffeqop, pkc.conexclop, pkc.conbin
                                            Index Cond: (pkc.conrelid = con.confrelid)
                                            Filter: (pkc.contype = ANY ('{p,u}'::"char"[]))
                                            Rows Removed by Filter: 2
                                            Buffers: shared hit=8
                    ->  Append  (cost=417.66..2272.67 rows=733 width=128) (actual time=0.011..9.830 rows=4287 loops=1672)
                          Buffers: shared hit=1913319
                          ->  Subquery Scan on "*SELECT* 1_1"  (cost=417.66..500.03 rows=175 width=128) (actual time=0.010..1.720 rows=1707 loops=1672)
                                Output: "*SELECT* 1_1".table_name, "*SELECT* 1_1".constraint_name
                                Buffers: shared hit=87220
                                ->  Hash Join  (cost=417.66..498.28 rows=175 width=512) (actual time=0.010..1.584 rows=1707 loops=1672)
                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_5.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_5.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                      Inner Unique: true
                                      Hash Cond: (c_5.connamespace = nc_4.oid)
                                      Buffers: shared hit=87220
                                      ->  Hash Join  (cost=416.52..496.36 rows=175 width=132) (actual time=0.008..1.190 rows=1707 loops=1672)
                                            Output: r_5.relname, c_5.conname, c_5.connamespace
                                            Inner Unique: true
                                            Hash Cond: (r_5.relnamespace = nr_5.oid)
                                            Buffers: shared hit=87219
                                            ->  Hash Join  (cost=415.40..494.06 rows=263 width=136) (actual time=0.007..0.869 rows=1707 loops=1672)
                                                  Output: c_5.conname, c_5.connamespace, r_5.relname, r_5.relnamespace
                                                  Inner Unique: true
                                                  Hash Cond: (c_5.conrelid = r_5.oid)
                                                  Buffers: shared hit=87218
                                                  ->  Seq Scan on pg_catalog.pg_constraint c_5  (cost=0.00..74.03 rows=1762 width=72) (actual time=0.004..0.379 rows=1709 loops=1672)
                                                        Output: c_5.oid, c_5.conname, c_5.connamespace, c_5.contype, c_5.condeferrable, c_5.condeferred, c_5.convalidated, c_5.conrelid, c_5.contypid, c_5.conindid, c_5.conparentid, c_5.confrelid, c_5.confupdtype, c_5.confdeltype, c_5.confmatchtype, c_5.conislocal, c_5.coninhcount, c_5.connoinherit, c_5.conkey, c_5.confkey, c_5.conpfeqop, c_5.conppeqop, c_5.conffeqop, c_5.conexclop, c_5.conbin
                                                        Filter: (c_5.contype <> ALL ('{t,x}'::"char"[]))
                                                        Buffers: shared hit=86944
                                                  ->  Hash  (cost=409.45..409.45 rows=476 width=72) (actual time=1.244..1.245 rows=694 loops=1)
                                                        Output: r_5.relname, r_5.relnamespace, r_5.oid
                                                        Buckets: 1024  Batches: 1  Memory Usage: 79kB
                                                        Buffers: shared hit=274
                                                        ->  Seq Scan on pg_catalog.pg_class r_5  (cost=0.00..409.45 rows=476 width=72) (actual time=0.011..1.118 rows=694 loops=1)
                                                              Output: r_5.relname, r_5.relnamespace, r_5.oid
                                                              Filter: ((r_5.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_5.relowner, 'USAGE'::text) OR has_table_privilege(r_5.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_5.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                              Rows Removed by Filter: 2559
                                                              Buffers: shared hit=274
                                            ->  Hash  (cost=1.07..1.07 rows=4 width=4) (actual time=0.019..0.019 rows=7 loops=1)
                                                  Output: nr_5.oid
                                                  Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                                  Buffers: shared hit=1
                                                  ->  Seq Scan on pg_catalog.pg_namespace nr_5  (cost=0.00..1.07 rows=4 width=4) (actual time=0.004..0.008 rows=7 loops=1)
                                                        Output: nr_5.oid
                                                        Filter: (NOT pg_is_other_temp_schema(nr_5.oid))
                                                        Rows Removed by Filter: 2
                                                        Buffers: shared hit=1
                                      ->  Hash  (cost=1.06..1.06 rows=6 width=4) (actual time=0.015..0.016 rows=9 loops=1)
                                            Output: nc_4.oid
                                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                            Buffers: shared hit=1
                                            ->  Seq Scan on pg_catalog.pg_namespace nc_4  (cost=0.00..1.06 rows=6 width=4) (actual time=0.010..0.011 rows=9 loops=1)
                                                  Output: nc_4.oid
                                                  Buffers: shared hit=1
                          ->  Subquery Scan on "*SELECT* 2_1"  (cost=416.52..1768.97 rows=558 width=128) (actual time=0.010..7.839 rows=2580 loops=1672)
                                Output: "*SELECT* 2_1".table_name, "*SELECT* 2_1".constraint_name
                                Buffers: shared hit=1826099
                                ->  Hash Join  (cost=416.52..1763.39 rows=558 width=512) (actual time=0.009..7.622 rows=2580 loops=1672)
                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (((((((nr_6.oid)::text || '_'::text) || (r_6.oid)::text) || '_'::text) || (a_3.attnum)::text) || '_not_null'::text))::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_6.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                      Inner Unique: true
                                      Hash Cond: (r_6.relnamespace = nr_6.oid)
                                      Buffers: shared hit=1826099
                                      ->  Hash Join  (cost=415.40..1741.77 rows=837 width=74) (actual time=0.004..5.410 rows=2580 loops=1672)
                                            Output: r_6.oid, r_6.relname, r_6.relnamespace, a_3.attnum
                                            Inner Unique: true
                                            Hash Cond: (a_3.attrelid = r_6.oid)
                                            Buffers: shared hit=1826098
                                            ->  Seq Scan on pg_catalog.pg_attribute a_3  (cost=0.00..1311.64 rows=5606 width=6) (actual time=0.002..4.792 rows=2598 loops=1672)
                                                  Output: a_3.attrelid, a_3.attname, a_3.atttypid, a_3.attstattarget, a_3.attlen, a_3.attnum, a_3.attndims, a_3.attcacheoff, a_3.atttypmod, a_3.attbyval, a_3.attstorage, a_3.attalign, a_3.attnotnull, a_3.atthasdef, a_3.atthasmissing, a_3.attidentity, a_3.attgenerated, a_3.attisdropped, a_3.attislocal, a_3.attinhcount, a_3.attcollation, a_3.attacl, a_3.attoptions, a_3.attfdwoptions, a_3.attmissingval
                                                  Filter: (a_3.attnotnull AND (NOT a_3.attisdropped) AND (a_3.attnum > 0))
                                                  Rows Removed by Filter: 15396
                                                  Buffers: shared hit=1825824
                                            ->  Hash  (cost=409.45..409.45 rows=476 width=72) (actual time=1.227..1.227 rows=694 loops=1)
                                                  Output: r_6.oid, r_6.relname, r_6.relnamespace
                                                  Buckets: 1024  Batches: 1  Memory Usage: 79kB
                                                  Buffers: shared hit=274
                                                  ->  Seq Scan on pg_catalog.pg_class r_6  (cost=0.00..409.45 rows=476 width=72) (actual time=0.011..1.087 rows=694 loops=1)
                                                        Output: r_6.oid, r_6.relname, r_6.relnamespace
                                                        Filter: ((r_6.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_6.relowner, 'USAGE'::text) OR has_table_privilege(r_6.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_6.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                        Rows Removed by Filter: 2559
                                                        Buffers: shared hit=274
                                      ->  Hash  (cost=1.07..1.07 rows=4 width=4) (actual time=0.015..0.015 rows=7 loops=1)
                                            Output: nr_6.oid
                                            Buckets: 1024  Batches: 1  Memory Usage: 9kB
                                            Buffers: shared hit=1
                                            ->  Seq Scan on pg_catalog.pg_namespace nr_6  (cost=0.00..1.07 rows=4 width=4) (actual time=0.008..0.011 rows=7 loops=1)
                                                  Output: nr_6.oid
                                                  Filter: (NOT pg_is_other_temp_schema(nr_6.oid))
                                                  Rows Removed by Filter: 2
                                                  Buffers: shared hit=1
        ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a  (cost=0.29..0.33 rows=1 width=70) (actual time=0.019..0.019 rows=1 loops=2)
              Output: a.attrelid, a.attname, a.atttypid, a.attstattarget, a.attlen, a.attnum, a.attndims, a.attcacheoff, a.atttypmod, a.attbyval, a.attstorage, a.attalign, a.attnotnull, a.atthasdef, a.atthasmissing, a.attidentity, a.attgenerated, a.attisdropped, a.attislocal, a.attinhcount, a.attcollation, a.attacl, a.attoptions, a.attfdwoptions, a.attmissingval
              Index Cond: ((a.attrelid = r_2.oid) AND (a.attnum = ((information_schema._pg_expandarray(c_3.conkey))).x))
              Filter: ((NOT a.attisdropped) AND (pg_has_role(r_2.relowner, 'USAGE'::text) OR has_column_privilege(r_2.oid, a.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))
              Buffers: shared hit=6
  ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a_1  (cost=0.29..0.33 rows=1 width=70) (actual time=0.007..0.007 rows=1 loops=2)
        Output: a_1.attrelid, a_1.attname, a_1.atttypid, a_1.attstattarget, a_1.attlen, a_1.attnum, a_1.attndims, a_1.attcacheoff, a_1.atttypmod, a_1.attbyval, a_1.attstorage, a_1.attalign, a_1.attnotnull, a_1.atthasdef, a_1.atthasmissing, a_1.attidentity, a_1.attgenerated, a_1.attisdropped, a_1.attislocal, a_1.attinhcount, a_1.attcollation, a_1.attacl, a_1.attoptions, a_1.attfdwoptions, a_1.attmissingval
        Index Cond: ((a_1.attrelid = r.oid) AND (a_1.attnum = ((information_schema._pg_expandarray(c_1.conkey))).x))
        Filter: ((NOT a_1.attisdropped) AND (pg_has_role(r.relowner, 'USAGE'::text) OR has_column_privilege(r.oid, a_1.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))
        Buffers: shared hit=6
Planning Time: 8.688 ms
Execution Time: 26311.005 ms


index scan
set enable_hashjoin = 0;
SELECT 
	FK.TABLE_NAME       as "TABLE_NAME"
	, CU.COLUMN_NAME    as "COLUMN_NAME"
	, PK.TABLE_NAME     as "REFERENCED_TABLE_NAME"
	, PT.COLUMN_NAME    as "REFERENCED_COLUMN_NAME"
	, C.CONSTRAINT_NAME as "CONSTRAINT_NAME" 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
INNER JOIN (   
	SELECT      
		i1.TABLE_NAME
		, i2.COLUMN_NAME
		FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1   
		INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
		WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
) PT ON PT.TABLE_NAME = PK.TABLE_NAME WHERE      
lower(FK.TABLE_NAME)='secrole_condcollection'

Nested Loop  (cost=1736.10..18890.44 rows=1 width=320) (actual time=30.780..79.572 rows=2 loops=1)
  Output: "*SELECT* 1".table_name, (a.attname)::information_schema.sql_identifier, "*SELECT* 1_1".table_name, (a_1.attname)::information_schema.sql_identifier, (con.conname)::information_schema.sql_identifier
  Inner Unique: true
  Buffers: shared hit=9018
  ->  Nested Loop  (cost=1735.81..18890.10 rows=1 width=296) (actual time=30.752..79.531 rows=2 loops=1)
        Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, a.attname, r_6.oid, (information_schema._pg_expandarray(c_5.conkey)), r_6.relowner
        Join Filter: (("*SELECT* 1_2".constraint_name)::name = c_5.conname)
        Rows Removed by Join Filter: 3964
        Buffers: shared hit=9012
        ->  Nested Loop  (cost=1170.86..11411.63 rows=1 width=320) (actual time=18.709..57.524 rows=2 loops=1)
              Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, a.attname, "*SELECT* 1_2".constraint_name
              Join Filter: (("*SELECT* 1_1".table_name)::name = ("*SELECT* 1_2".table_name)::name)
              Rows Removed by Join Filter: 1188
              Buffers: shared hit=8684
              ->  Nested Loop  (cost=1170.58..11238.29 rows=1 width=256) (actual time=16.937..45.450 rows=2 loops=1)
                    Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, a.attname
                    Inner Unique: true
                    Buffers: shared hit=2630
                    ->  Nested Loop  (cost=1170.30..11237.95 rows=1 width=232) (actual time=16.909..45.398 rows=2 loops=1)
                          Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1_1".table_name, r_4.oid, (information_schema._pg_expandarray(c_3.conkey)), r_4.relowner
                          Join Filter: (con.conname = c_3.conname)
                          Rows Removed by Join Filter: 3964
                          Buffers: shared hit=2624
                          ->  Nested Loop  (cost=605.35..3759.48 rows=1 width=256) (actual time=5.769..23.698 rows=2 loops=1)
                                Output: con.conname, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name, "*SELECT* 1_1".table_name
                                Join Filter: (pkc.conname = ("*SELECT* 1_1".constraint_name)::name)
                                Rows Removed by Join Filter: 8572
                                Buffers: shared hit=2296
                                ->  Nested Loop  (cost=5.71..933.65 rows=1 width=256) (actual time=1.324..2.731 rows=2 loops=1)
                                      Output: con.conname, pkc.conname, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                      Inner Unique: true
                                      Join Filter: (d2.refobjid = pkc.oid)
                                      Buffers: shared hit=601
                                      ->  Nested Loop  (cost=5.43..933.00 rows=1 width=200) (actual time=1.315..2.713 rows=2 loops=1)
                                            Output: con.conname, con.confrelid, d2.refobjid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                            Buffers: shared hit=593
                                            ->  Nested Loop  (cost=5.15..931.14 rows=1 width=200) (actual time=1.305..2.687 rows=2 loops=1)
                                                  Output: con.conname, con.confrelid, d1.refobjid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                  Buffers: shared hit=587
                                                  ->  Nested Loop  (cost=4.86..929.16 rows=1 width=200) (actual time=1.292..2.662 rows=2 loops=1)
                                                        Output: con.conname, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                        Inner Unique: true
                                                        Join Filter: (con.connamespace = ncon.oid)
                                                        Rows Removed by Join Filter: 10
                                                        Buffers: shared hit=581
                                                        ->  Nested Loop  (cost=4.86..928.02 rows=1 width=204) (actual time=1.288..2.652 rows=2 loops=1)
                                                              Output: con.conname, con.connamespace, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                              Inner Unique: true
                                                              Buffers: shared hit=579
                                                              ->  Nested Loop  (cost=4.58..925.06 rows=2 width=208) (actual time=1.273..2.626 rows=2 loops=1)
                                                                    Output: con.conname, con.connamespace, con.conrelid, con.oid, con.confrelid, "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                                    Buffers: shared hit=573
                                                                    ->  Append  (cost=4.30..900.14 rows=3 width=128) (actual time=1.250..2.586 rows=5 loops=1)
                                                                          Buffers: shared hit=560
                                                                          ->  Subquery Scan on "*SELECT* 1"  (cost=4.30..449.91 rows=1 width=128) (actual time=1.249..1.283 rows=3 loops=1)
                                                                                Output: "*SELECT* 1".table_name, "*SELECT* 1".constraint_name
                                                                                Buffers: shared hit=282
                                                                                ->  Nested Loop  (cost=4.30..449.90 rows=1 width=512) (actual time=1.249..1.280 rows=3 loops=1)
                                                                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_1.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                                                      Inner Unique: true
                                                                                      Join Filter: (c_1.connamespace = nc.oid)
                                                                                      Rows Removed by Join Filter: 15
                                                                                      Buffers: shared hit=282
                                                                                      ->  Nested Loop  (cost=4.30..448.76 rows=1 width=132) (actual time=1.242..1.257 rows=3 loops=1)
                                                                                            Output: r.relname, c_1.conname, c_1.connamespace
                                                                                            Buffers: shared hit=279
                                                                                            ->  Nested Loop  (cost=0.00..434.55 rows=1 width=68) (actual time=1.217..1.225 rows=1 loops=1)
                                                                                                  Output: r.relname, r.oid
                                                                                                  Join Filter: (nr.oid = r.relnamespace)
                                                                                                  Rows Removed by Join Filter: 6
                                                                                                  Buffers: shared hit=275
                                                                                                  ->  Seq Scan on pg_catalog.pg_namespace nr  (cost=0.00..1.07 rows=4 width=4) (actual time=0.010..0.017 rows=7 loops=1)
                                                                                                        Output: nr.oid, nr.nspname, nr.nspowner, nr.nspacl
                                                                                                        Filter: (NOT pg_is_other_temp_schema(nr.oid))
                                                                                                        Rows Removed by Filter: 2
                                                                                                        Buffers: shared hit=1
                                                                                                  ->  Materialize  (cost=0.00..433.36 rows=2 width=72) (actual time=0.004..0.172 rows=1 loops=7)
                                                                                                        Output: r.relname, r.relnamespace, r.oid
                                                                                                        Buffers: shared hit=274
                                                                                                        ->  Seq Scan on pg_catalog.pg_class r  (cost=0.00..433.35 rows=2 width=72) (actual time=0.028..1.198 rows=1 loops=1)
                                                                                                              Output: r.relname, r.relnamespace, r.oid
                                                                                                              Filter: ((r.relkind = ANY ('{r,p}'::"char"[])) AND (lower(((r.relname)::information_schema.sql_identifier)::text) = 'secrole_condcollection'::text) AND (pg_has_role(r.relowner, 'USAGE'::text) OR has_table_privilege(r.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                                                              Rows Removed by Filter: 3252
                                                                                                              Buffers: shared hit=274
                                                                                            ->  Bitmap Heap Scan on pg_catalog.pg_constraint c_1  (cost=4.30..14.18 rows=3 width=72) (actual time=0.020..0.026 rows=3 loops=1)
                                                                                                  Output: c_1.oid, c_1.conname, c_1.connamespace, c_1.contype, c_1.condeferrable, c_1.condeferred, c_1.convalidated, c_1.conrelid, c_1.contypid, c_1.conindid, c_1.conparentid, c_1.confrelid, c_1.confupdtype, c_1.confdeltype, c_1.confmatchtype, c_1.conislocal, c_1.coninhcount, c_1.connoinherit, c_1.conkey, c_1.confkey, c_1.conpfeqop, c_1.conppeqop, c_1.conffeqop, c_1.conexclop, c_1.conbin
                                                                                                  Recheck Cond: (c_1.conrelid = r.oid)
                                                                                                  Filter: (c_1.contype <> ALL ('{t,x}'::"char"[]))
                                                                                                  Heap Blocks: exact=2
                                                                                                  Buffers: shared hit=4
                                                                                                  ->  Bitmap Index Scan on pg_constraint_conrelid_contypid_conname_index  (cost=0.00..4.30 rows=3 width=0) (actual time=0.016..0.016 rows=3 loops=1)
                                                                                                        Index Cond: (c_1.conrelid = r.oid)
                                                                                                        Buffers: shared hit=2
                                                                                      ->  Seq Scan on pg_catalog.pg_namespace nc  (cost=0.00..1.06 rows=6 width=4) (actual time=0.002..0.003 rows=6 loops=3)
                                                                                            Output: nc.oid, nc.nspname, nc.nspowner, nc.nspacl
                                                                                            Buffers: shared hit=3
                                                                          ->  Subquery Scan on "*SELECT* 2"  (cost=0.29..450.21 rows=2 width=128) (actual time=1.294..1.300 rows=2 loops=1)
                                                                                Output: "*SELECT* 2".table_name, "*SELECT* 2".constraint_name
                                                                                Buffers: shared hit=278
                                                                                ->  Nested Loop  (cost=0.29..450.19 rows=2 width=512) (actual time=1.294..1.299 rows=2 loops=1)
                                                                                      Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (((((((nr_1.oid)::text || '_'::text) || (r_1.oid)::text) || '_'::text) || (a_2.attnum)::text) || '_not_null'::text))::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_1.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                                                      Buffers: shared hit=278
                                                                                      ->  Nested Loop  (cost=0.00..434.55 rows=1 width=72) (actual time=1.273..1.276 rows=1 loops=1)
                                                                                            Output: nr_1.oid, r_1.oid, r_1.relname
                                                                                            Join Filter: (nr_1.oid = r_1.relnamespace)
                                                                                            Rows Removed by Join Filter: 6
                                                                                            Buffers: shared hit=275
                                                                                            ->  Seq Scan on pg_catalog.pg_namespace nr_1  (cost=0.00..1.07 rows=4 width=4) (actual time=0.013..0.017 rows=7 loops=1)
                                                                                                  Output: nr_1.oid, nr_1.nspname, nr_1.nspowner, nr_1.nspacl
                                                                                                  Filter: (NOT pg_is_other_temp_schema(nr_1.oid))
                                                                                                  Rows Removed by Filter: 2
                                                                                                  Buffers: shared hit=1
                                                                                            ->  Materialize  (cost=0.00..433.36 rows=2 width=72) (actual time=0.006..0.179 rows=1 loops=7)
                                                                                                  Output: r_1.oid, r_1.relname, r_1.relnamespace
                                                                                                  Buffers: shared hit=274
                                                                                                  ->  Seq Scan on pg_catalog.pg_class r_1  (cost=0.00..433.35 rows=2 width=72) (actual time=0.030..1.245 rows=1 loops=1)
                                                                                                        Output: r_1.oid, r_1.relname, r_1.relnamespace
                                                                                                        Filter: ((r_1.relkind = ANY ('{r,p}'::"char"[])) AND (lower(((r_1.relname)::information_schema.sql_identifier)::text) = 'secrole_condcollection'::text) AND (pg_has_role(r_1.relowner, 'USAGE'::text) OR has_table_privilege(r_1.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_1.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                                                        Rows Removed by Filter: 3252
                                                                                                        Buffers: shared hit=274
                                                                                      ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a_2  (cost=0.29..15.56 rows=2 width=6) (actual time=0.015..0.016 rows=2 loops=1)
                                                                                            Output: a_2.attrelid, a_2.attname, a_2.atttypid, a_2.attstattarget, a_2.attlen, a_2.attnum, a_2.attndims, a_2.attcacheoff, a_2.atttypmod, a_2.attbyval, a_2.attstorage, a_2.attalign, a_2.attnotnull, a_2.atthasdef, a_2.atthasmissing, a_2.attidentity, a_2.attgenerated, a_2.attisdropped, a_2.attislocal, a_2.attinhcount, a_2.attcollation, a_2.attacl, a_2.attoptions, a_2.attfdwoptions, a_2.attmissingval
                                                                                            Index Cond: ((a_2.attrelid = r_1.oid) AND (a_2.attnum > 0))
                                                                                            Filter: (a_2.attnotnull AND (NOT a_2.attisdropped))
                                                                                            Buffers: shared hit=3
                                                                    ->  Index Scan using pg_constraint_conname_nsp_index on pg_catalog.pg_constraint con  (cost=0.28..8.30 rows=1 width=80) (actual time=0.006..0.007 rows=0 loops=5)
                                                                          Output: con.oid, con.conname, con.connamespace, con.contype, con.condeferrable, con.condeferred, con.convalidated, con.conrelid, con.contypid, con.conindid, con.conparentid, con.confrelid, con.confupdtype, con.confdeltype, con.confmatchtype, con.conislocal, con.coninhcount, con.connoinherit, con.conkey, con.confkey, con.conpfeqop, con.conppeqop, con.conffeqop, con.conexclop, con.conbin
                                                                          Index Cond: (con.conname = ("*SELECT* 1".constraint_name)::name)
                                                                          Filter: (con.contype = 'f'::"char")
                                                                          Rows Removed by Filter: 0
                                                                          Buffers: shared hit=13
                                                              ->  Index Scan using pg_class_oid_index on pg_catalog.pg_class c  (cost=0.28..1.48 rows=1 width=4) (actual time=0.010..0.011 rows=1 loops=2)
                                                                    Output: c.oid, c.relname, c.relnamespace, c.reltype, c.reloftype, c.relowner, c.relam, c.relfilenode, c.reltablespace, c.relpages, c.reltuples, c.relallvisible, c.reltoastrelid, c.relhasindex, c.relisshared, c.relpersistence, c.relkind, c.relnatts, c.relchecks, c.relhasrules, c.relhastriggers, c.relhassubclass, c.relrowsecurity, c.relforcerowsecurity, c.relispopulated, c.relreplident, c.relispartition, c.relrewrite, c.relfrozenxid, c.relminmxid, c.relacl, c.reloptions, c.relpartbound
                                                                    Index Cond: (c.oid = con.conrelid)
                                                                    Filter: (pg_has_role(c.relowner, 'USAGE'::text) OR has_table_privilege(c.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(c.oid, 'INSERT, UPDATE, REFERENCES'::text))
                                                                    Buffers: shared hit=6
                                                        ->  Seq Scan on pg_catalog.pg_namespace ncon  (cost=0.00..1.06 rows=6 width=4) (actual time=0.002..0.002 rows=6 loops=2)
                                                              Output: ncon.oid, ncon.nspname, ncon.nspowner, ncon.nspacl
                                                              Buffers: shared hit=2
                                                  ->  Index Scan using pg_depend_depender_index on pg_catalog.pg_depend d1  (cost=0.29..1.97 rows=1 width=8) (actual time=0.010..0.011 rows=1 loops=2)
                                                        Output: d1.classid, d1.objid, d1.objsubid, d1.refclassid, d1.refobjid, d1.refobjsubid, d1.deptype
                                                        Index Cond: ((d1.classid = "" AND (d1.objid = con.oid))
                                                        Filter: ((d1.refclassid = '1259'::oid) AND (d1.refobjsubid = 0))
                                                        Rows Removed by Filter: 2
                                                        Buffers: shared hit=6
                                            ->  Index Scan using pg_depend_depender_index on pg_catalog.pg_depend d2  (cost=0.29..1.85 rows=1 width=8) (actual time=0.006..0.010 rows=1 loops=2)
                                                  Output: d2.classid, d2.objid, d2.objsubid, d2.refclassid, d2.refobjid, d2.refobjsubid, d2.deptype
                                                  Index Cond: ((d2.classid = "" AND (d2.objid = d1.refobjid) AND (d2.objsubid = 0))
                                                  Filter: ((d2.refclassid = '2606'::oid) AND (d2.deptype = 'i'::"char"))
                                                  Buffers: shared hit=6
                                      ->  Index Scan using pg_constraint_conrelid_contypid_conname_index on pg_catalog.pg_constraint pkc  (cost=0.28..0.64 rows=1 width=76) (actual time=0.007..0.007 rows=1 loops=2)
                                            Output: pkc.oid, pkc.conname, pkc.connamespace, pkc.contype, pkc.condeferrable, pkc.condeferred, pkc.convalidated, pkc.conrelid, pkc.contypid, pkc.conindid, pkc.conparentid, pkc.confrelid, pkc.confupdtype, pkc.confdeltype, pkc.confmatchtype, pkc.conislocal, pkc.coninhcount, pkc.connoinherit, pkc.conkey, pkc.confkey, pkc.conpfeqop, pkc.conppeqop, pkc.conffeqop, pkc.conexclop, pkc.conbin
                                            Index Cond: (pkc.conrelid = con.confrelid)
                                            Filter: (pkc.contype = ANY ('{p,u}'::"char"[]))
                                            Rows Removed by Filter: 2
                                            Buffers: shared hit=8
                                ->  Append  (cost=599.64..2816.66 rows=733 width=128) (actual time=1.033..10.237 rows=4287 loops=2)
                                      Buffers: shared hit=1695
                                      ->  Subquery Scan on "*SELECT* 1_1"  (cost=599.64..645.39 rows=175 width=128) (actual time=1.032..3.966 rows=1707 loops=2)
                                            Output: "*SELECT* 1_1".table_name, "*SELECT* 1_1".constraint_name
                                            Buffers: shared hit=328
                                            ->  Nested Loop  (cost=599.64..643.64 rows=175 width=512) (actual time=1.032..3.842 rows=1707 loops=2)
                                                  Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_2.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_2.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                  Inner Unique: true
                                                  Join Filter: (c_2.connamespace = nc_1.oid)
                                                  Rows Removed by Join Filter: 8624
                                                  Buffers: shared hit=328
                                                  ->  Nested Loop  (cost=599.64..628.68 rows=175 width=132) (actual time=1.028..2.578 rows=1707 loops=2)
                                                        Output: r_2.relname, c_2.conname, c_2.connamespace
                                                        Inner Unique: true
                                                        Join Filter: (r_2.relnamespace = nr_2.oid)
                                                        Rows Removed by Join Filter: 5210
                                                        Buffers: shared hit=327
                                                        ->  Merge Join  (cost=599.64..613.40 rows=263 width=136) (actual time=1.019..1.684 rows=1707 loops=2)
                                                              Output: c_2.conname, c_2.connamespace, r_2.relname, r_2.relnamespace
                                                              Inner Unique: true
                                                              Merge Cond: (c_2.conrelid = r_2.oid)
                                                              Buffers: shared hit=326
                                                              ->  Sort  (cost=169.02..173.43 rows=1762 width=72) (actual time=0.473..0.622 rows=1709 loops=2)
                                                                    Output: c_2.conname, c_2.connamespace, c_2.conrelid
                                                                    Sort Key: c_2.conrelid
                                                                    Sort Method: quicksort  Memory: 289kB
                                                                    Buffers: shared hit=52
                                                                    ->  Seq Scan on pg_catalog.pg_constraint c_2  (cost=0.00..74.03 rows=1762 width=72) (actual time=0.005..0.469 rows=1709 loops=1)
                                                                          Output: c_2.conname, c_2.connamespace, c_2.conrelid
                                                                          Filter: (c_2.contype <> ALL ('{t,x}'::"char"[]))
                                                                          Buffers: shared hit=52
                                                              ->  Sort  (cost=430.62..431.81 rows=476 width=72) (actual time=0.533..0.604 rows=694 loops=2)
                                                                    Output: r_2.relname, r_2.relnamespace, r_2.oid
                                                                    Sort Key: r_2.oid
                                                                    Sort Method: quicksort  Memory: 122kB
                                                                    Buffers: shared hit=274
                                                                    ->  Seq Scan on pg_catalog.pg_class r_2  (cost=0.00..409.45 rows=476 width=72) (actual time=0.007..0.882 rows=694 loops=1)
                                                                          Output: r_2.relname, r_2.relnamespace, r_2.oid
                                                                          Filter: ((r_2.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_2.relowner, 'USAGE'::text) OR has_table_privilege(r_2.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_2.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                          Rows Removed by Filter: 2559
                                                                          Buffers: shared hit=274
                                                        ->  Materialize  (cost=0.00..1.09 rows=4 width=4) (actual time=0.000..0.000 rows=4 loops=3414)
                                                              Output: nr_2.oid
                                                              Buffers: shared hit=1
                                                              ->  Seq Scan on pg_catalog.pg_namespace nr_2  (cost=0.00..1.07 rows=4 width=4) (actual time=0.009..0.015 rows=7 loops=1)
                                                                    Output: nr_2.oid
                                                                    Filter: (NOT pg_is_other_temp_schema(nr_2.oid))
                                                                    Rows Removed by Filter: 2
                                                                    Buffers: shared hit=1
                                                  ->  Materialize  (cost=0.00..1.09 rows=6 width=4) (actual time=0.000..0.000 rows=6 loops=3414)
                                                        Output: nc_1.oid
                                                        Buffers: shared hit=1
                                                        ->  Seq Scan on pg_catalog.pg_namespace nc_1  (cost=0.00..1.06 rows=6 width=4) (actual time=0.003..0.004 rows=9 loops=1)
                                                              Output: nc_1.oid
                                                              Buffers: shared hit=1
                                      ->  Subquery Scan on "*SELECT* 2_1"  (cost=2110.11..2167.61 rows=558 width=128) (actual time=3.730..6.052 rows=2580 loops=2)
                                            Output: "*SELECT* 2_1".table_name, "*SELECT* 2_1".constraint_name
                                            Buffers: shared hit=1367
                                            ->  Merge Join  (cost=2110.11..2162.03 rows=558 width=512) (actual time=3.729..5.866 rows=2580 loops=2)
                                                  Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (((((((nr_3.oid)::text || '_'::text) || (r_3.oid)::text) || '_'::text) || (a_3.attnum)::text) || '_not_null'::text))::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_3.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                                                  Merge Cond: (r_3.oid = a_3.attrelid)
                                                  Buffers: shared hit=1367
                                                  ->  Sort  (cost=449.42..450.21 rows=317 width=72) (actual time=0.900..0.965 rows=694 loops=2)
                                                        Output: nr_3.oid, r_3.oid, r_3.relname
                                                        Sort Key: r_3.oid
                                                        Sort Method: quicksort  Memory: 122kB
                                                        Buffers: shared hit=275
                                                        ->  Nested Loop  (cost=0.00..436.25 rows=317 width=72) (actual time=0.038..1.605 rows=694 loops=1)
                                                              Output: nr_3.oid, r_3.oid, r_3.relname
                                                              Inner Unique: true
                                                              Join Filter: (nr_3.oid = r_3.relnamespace)
                                                              Rows Removed by Join Filter: 2013
                                                              Buffers: shared hit=275
                                                              ->  Seq Scan on pg_catalog.pg_class r_3  (cost=0.00..409.45 rows=476 width=72) (actual time=0.022..1.227 rows=694 loops=1)
                                                                    Output: r_3.oid, r_3.relname, r_3.relnamespace, r_3.reltype, r_3.reloftype, r_3.relowner, r_3.relam, r_3.relfilenode, r_3.reltablespace, r_3.relpages, r_3.reltuples, r_3.relallvisible, r_3.reltoastrelid, r_3.relhasindex, r_3.relisshared, r_3.relpersistence, r_3.relkind, r_3.relnatts, r_3.relchecks, r_3.relhasrules, r_3.relhastriggers, r_3.relhassubclass, r_3.relrowsecurity, r_3.relforcerowsecurity, r_3.relispopulated, r_3.relreplident, r_3.relispartition, r_3.relrewrite, r_3.relfrozenxid, r_3.relminmxid, r_3.relacl, r_3.reloptions, r_3.relpartbound
                                                                    Filter: ((r_3.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_3.relowner, 'USAGE'::text) OR has_table_privilege(r_3.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_3.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                                                    Rows Removed by Filter: 2559
                                                                    Buffers: shared hit=274
                                                              ->  Materialize  (cost=0.00..1.09 rows=4 width=4) (actual time=0.000..0.000 rows=4 loops=694)
                                                                    Output: nr_3.oid
                                                                    Buffers: shared hit=1
                                                                    ->  Seq Scan on pg_catalog.pg_namespace nr_3  (cost=0.00..1.07 rows=4 width=4) (actual time=0.006..0.009 rows=7 loops=1)
                                                                          Output: nr_3.oid
                                                                          Filter: (NOT pg_is_other_temp_schema(nr_3.oid))
                                                                          Rows Removed by Filter: 2
                                                                          Buffers: shared hit=1
                                                  ->  Sort  (cost=1660.69..1674.70 rows=5606 width=6) (actual time=2.822..2.946 rows=2598 loops=2)
                                                        Output: a_3.attnum, a_3.attrelid
                                                        Sort Key: a_3.attrelid
                                                        Sort Method: quicksort  Memory: 218kB
                                                        Buffers: shared hit=1092
                                                        ->  Seq Scan on pg_catalog.pg_attribute a_3  (cost=0.00..1311.64 rows=5606 width=6) (actual time=0.008..5.054 rows=2598 loops=1)
                                                              Output: a_3.attnum, a_3.attrelid
                                                              Filter: (a_3.attnotnull AND (NOT a_3.attisdropped) AND (a_3.attnum > 0))
                                                              Rows Removed by Filter: 15396
                                                              Buffers: shared hit=1092
                          ->  ProjectSet  (cost=564.95..1875.97 rows=249000 width=341) (actual time=2.154..10.656 rows=1983 loops=2)
                                Output: r_4.oid, NULL::name, r_4.relowner, NULL::name, NULL::name, NULL::oid, c_3.conname, NULL::"char", NULL::oid, NULL::smallint[], NULL::oid, information_schema._pg_expandarray(c_3.conkey)
                                Buffers: shared hit=328
                                ->  Merge Join  (cost=564.95..567.48 rows=249 width=95) (actual time=2.034..2.481 rows=1707 loops=2)
                                      Output: c_3.conkey, r_4.oid, r_4.relowner, c_3.conname
                                      Inner Unique: true
                                      Merge Cond: (c_3.connamespace = nc_2.oid)
                                      Buffers: shared hit=328
                                      ->  Sort  (cost=563.80..564.43 rows=249 width=99) (actual time=2.026..2.119 rows=1707 loops=2)
                                            Output: r_4.oid, r_4.relowner, c_3.conname, c_3.conkey, c_3.connamespace
                                            Sort Key: c_3.connamespace
                                            Sort Method: quicksort  Memory: 289kB
                                            Buffers: shared hit=327
                                            ->  Nested Loop  (cost=516.77..553.89 rows=249 width=99) (actual time=2.080..3.571 rows=1707 loops=1)
                                                  Output: r_4.oid, r_4.relowner, c_3.conname, c_3.conkey, c_3.connamespace
                                                  Inner Unique: true
                                                  Join Filter: (r_4.relnamespace = nr_4.oid)
                                                  Rows Removed by Join Filter: 5210
                                                  Buffers: shared hit=327
                                                  ->  Merge Join  (cost=516.77..532.60 rows=374 width=103) (actual time=2.065..2.631 rows=1707 loops=1)
                                                        Output: r_4.oid, r_4.relowner, r_4.relnamespace, c_3.conname, c_3.conkey, c_3.connamespace
                                                        Merge Cond: (r_4.oid = c_3.conrelid)
                                                        Buffers: shared hit=326
                                                        ->  Sort  (cost=345.67..347.36 rows=677 width=12) (actual time=0.999..1.034 rows=694 loops=1)
                                                              Output: r_4.oid, r_4.relowner, r_4.relnamespace
                                                              Sort Key: r_4.oid
                                                              Sort Method: quicksort  Memory: 57kB
                                                              Buffers: shared hit=274
                                                              ->  Seq Scan on pg_catalog.pg_class r_4  (cost=0.00..313.84 rows=677 width=12) (actual time=0.014..0.848 rows=694 loops=1)
                                                                    Output: r_4.oid, r_4.relowner, r_4.relnamespace
                                                                    Filter: (r_4.relkind = ANY ('{r,p}'::"char"[]))
                                                                    Rows Removed by Filter: 2559
                                                                    Buffers: shared hit=274
                                                        ->  Sort  (cost=171.10..175.50 rows=1760 width=95) (actual time=1.056..1.164 rows=1707 loops=1)
                                                              Output: c_3.conname, c_3.conkey, c_3.conrelid, c_3.connamespace
                                                              Sort Key: c_3.conrelid
                                                              Sort Method: quicksort  Memory: 289kB
                                                              Buffers: shared hit=52
                                                              ->  Seq Scan on pg_catalog.pg_constraint c_3  (cost=0.00..76.23 rows=1760 width=95) (actual time=0.009..0.519 rows=1707 loops=1)
                                                                    Output: c_3.conname, c_3.conkey, c_3.conrelid, c_3.connamespace
                                                                    Filter: (c_3.contype = ANY ('{p,u,f}'::"char"[]))
                                                                    Rows Removed by Filter: 2
                                                                    Buffers: shared hit=52
                                                  ->  Materialize  (cost=0.00..1.09 rows=4 width=4) (actual time=0.000..0.000 rows=4 loops=1707)
                                                        Output: nr_4.oid
                                                        Buffers: shared hit=1
                                                        ->  Seq Scan on pg_catalog.pg_namespace nr_4  (cost=0.00..1.07 rows=4 width=4) (actual time=0.007..0.011 rows=7 loops=1)
                                                              Output: nr_4.oid
                                                              Filter: (NOT pg_is_other_temp_schema(nr_4.oid))
                                                              Rows Removed by Filter: 2
                                                              Buffers: shared hit=1
                                      ->  Sort  (cost=1.14..1.15 rows=6 width=4) (actual time=0.006..0.008 rows=9 loops=2)
                                            Output: nc_2.oid
                                            Sort Key: nc_2.oid
                                            Sort Method: quicksort  Memory: 25kB
                                            Buffers: shared hit=1
                                            ->  Seq Scan on pg_catalog.pg_namespace nc_2  (cost=0.00..1.06 rows=6 width=4) (actual time=0.006..0.007 rows=9 loops=1)
                                                  Output: nc_2.oid
                                                  Buffers: shared hit=1
                    ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a  (cost=0.29..0.33 rows=1 width=70) (actual time=0.020..0.020 rows=1 loops=2)
                          Output: a.attrelid, a.attname, a.atttypid, a.attstattarget, a.attlen, a.attnum, a.attndims, a.attcacheoff, a.atttypmod, a.attbyval, a.attstorage, a.attalign, a.attnotnull, a.atthasdef, a.atthasmissing, a.attidentity, a.attgenerated, a.attisdropped, a.attislocal, a.attinhcount, a.attcollation, a.attacl, a.attoptions, a.attfdwoptions, a.attmissingval
                          Index Cond: ((a.attrelid = r_4.oid) AND (a.attnum = ((information_schema._pg_expandarray(c_3.conkey))).x))
                          Filter: ((NOT a.attisdropped) AND (pg_has_role(r_4.relowner, 'USAGE'::text) OR has_column_privilege(r_4.oid, a.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))
                          Buffers: shared hit=6
              ->  Subquery Scan on "*SELECT* 1_2"  (cost=0.28..173.32 rows=1 width=128) (actual time=0.040..5.978 rows=595 loops=2)
                    Output: "*SELECT* 1_2".constraint_name, "*SELECT* 1_2".table_name
                    Buffers: shared hit=6054
                    ->  Nested Loop  (cost=0.28..173.31 rows=1 width=512) (actual time=0.040..5.914 rows=595 loops=2)
                          Output: NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (c_4.conname)::information_schema.sql_identifier, NULL::information_schema.sql_identifier, NULL::information_schema.sql_identifier, (r_5.relname)::information_schema.sql_identifier, NULL::information_schema.character_data, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no, NULL::information_schema.yes_or_no
                          Inner Unique: true
                          Join Filter: (r_5.relnamespace = nr_5.oid)
                          Rows Removed by Join Filter: 1836
                          Buffers: shared hit=6054
                          ->  Nested Loop  (cost=0.28..172.19 rows=1 width=132) (actual time=0.031..3.784 rows=595 loops=2)
                                Output: c_4.conname, r_5.relname, r_5.relnamespace
                                Inner Unique: true
                                Join Filter: (c_4.connamespace = nc_3.oid)
                                Rows Removed by Join Filter: 3026
                                Buffers: shared hit=4864
                                ->  Nested Loop  (cost=0.28..171.05 rows=1 width=136) (actual time=0.024..1.976 rows=595 loops=2)
                                      Output: c_4.conname, c_4.connamespace, r_5.relname, r_5.relnamespace
                                      Inner Unique: true
                                      Buffers: shared hit=3674
                                      ->  Seq Scan on pg_catalog.pg_constraint c_4  (cost=0.00..96.05 rows=9 width=72) (actual time=0.012..0.489 rows=595 loops=2)
                                            Output: c_4.oid, c_4.conname, c_4.connamespace, c_4.contype, c_4.condeferrable, c_4.condeferred, c_4.convalidated, c_4.conrelid, c_4.contypid, c_4.conindid, c_4.conparentid, c_4.confrelid, c_4.confupdtype, c_4.confdeltype, c_4.confmatchtype, c_4.conislocal, c_4.coninhcount, c_4.connoinherit, c_4.conkey, c_4.confkey, c_4.conpfeqop, c_4.conppeqop, c_4.conffeqop, c_4.conexclop, c_4.conbin
                                            Filter: ((c_4.contype <> ALL ('{t,x}'::"char"[])) AND ((CASE c_4.contype WHEN 'c'::"char" THEN 'CHECK'::text WHEN 'f'::"char" THEN 'FOREIGN KEY'::text WHEN 'p'::"char" THEN 'PRIMARY KEY'::text WHEN 'u'::"char" THEN 'UNIQUE'::text ELSE NULL::text END)::text = 'PRIMARY KEY'::text))
                                            Rows Removed by Filter: 1114
                                            Buffers: shared hit=104
                                      ->  Index Scan using pg_class_oid_index on pg_catalog.pg_class r_5  (cost=0.28..8.33 rows=1 width=72) (actual time=0.002..0.002 rows=1 loops=1190)
                                            Output: r_5.oid, r_5.relname, r_5.relnamespace, r_5.reltype, r_5.reloftype, r_5.relowner, r_5.relam, r_5.relfilenode, r_5.reltablespace, r_5.relpages, r_5.reltuples, r_5.relallvisible, r_5.reltoastrelid, r_5.relhasindex, r_5.relisshared, r_5.relpersistence, r_5.relkind, r_5.relnatts, r_5.relchecks, r_5.relhasrules, r_5.relhastriggers, r_5.relhassubclass, r_5.relrowsecurity, r_5.relforcerowsecurity, r_5.relispopulated, r_5.relreplident, r_5.relispartition, r_5.relrewrite, r_5.relfrozenxid, r_5.relminmxid, r_5.relacl, r_5.reloptions, r_5.relpartbound
                                            Index Cond: (r_5.oid = c_4.conrelid)
                                            Filter: ((r_5.relkind = ANY ('{r,p}'::"char"[])) AND (pg_has_role(r_5.relowner, 'USAGE'::text) OR has_table_privilege(r_5.oid, 'INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r_5.oid, 'INSERT, UPDATE, REFERENCES'::text)))
                                            Buffers: shared hit=3570
                                ->  Seq Scan on pg_catalog.pg_namespace nc_3  (cost=0.00..1.06 rows=6 width=4) (actual time=0.000..0.001 rows=6 loops=1190)
                                      Output: nc_3.oid, nc_3.nspname, nc_3.nspowner, nc_3.nspacl
                                      Buffers: shared hit=1190
                          ->  Seq Scan on pg_catalog.pg_namespace nr_5  (cost=0.00..1.07 rows=4 width=4) (actual time=0.001..0.002 rows=4 loops=1190)
                                Output: nr_5.oid, nr_5.nspname, nr_5.nspowner, nr_5.nspacl
                                Filter: (NOT pg_is_other_temp_schema(nr_5.oid))
                                Rows Removed by Filter: 2
                                Buffers: shared hit=1190
        ->  ProjectSet  (cost=564.95..1875.97 rows=249000 width=341) (actual time=2.653..10.818 rows=1983 loops=2)
              Output: r_6.oid, NULL::name, r_6.relowner, NULL::name, NULL::name, NULL::oid, c_5.conname, NULL::"char", NULL::oid, NULL::smallint[], NULL::oid, information_schema._pg_expandarray(c_5.conkey)
              Buffers: shared hit=328
              ->  Merge Join  (cost=564.95..567.48 rows=249 width=95) (actual time=2.571..3.014 rows=1707 loops=2)
                    Output: c_5.conkey, r_6.oid, r_6.relowner, c_5.conname
                    Inner Unique: true
                    Merge Cond: (c_5.connamespace = nc_4.oid)
                    Buffers: shared hit=328
                    ->  Sort  (cost=563.80..564.43 rows=249 width=99) (actual time=2.557..2.654 rows=1707 loops=2)
                          Output: r_6.oid, r_6.relowner, c_5.conname, c_5.conkey, c_5.connamespace
                          Sort Key: c_5.connamespace
                          Sort Method: quicksort  Memory: 289kB
                          Buffers: shared hit=327
                          ->  Nested Loop  (cost=516.77..553.89 rows=249 width=99) (actual time=2.335..4.616 rows=1707 loops=1)
                                Output: r_6.oid, r_6.relowner, c_5.conname, c_5.conkey, c_5.connamespace
                                Inner Unique: true
                                Join Filter: (r_6.relnamespace = nr_6.oid)
                                Rows Removed by Join Filter: 5210
                                Buffers: shared hit=327
                                ->  Merge Join  (cost=516.77..532.60 rows=374 width=103) (actual time=2.320..2.962 rows=1707 loops=1)
                                      Output: r_6.oid, r_6.relowner, r_6.relnamespace, c_5.conname, c_5.conkey, c_5.connamespace
                                      Merge Cond: (r_6.oid = c_5.conrelid)
                                      Buffers: shared hit=326
                                      ->  Sort  (cost=345.67..347.36 rows=677 width=12) (actual time=1.185..1.231 rows=694 loops=1)
                                            Output: r_6.oid, r_6.relowner, r_6.relnamespace
                                            Sort Key: r_6.oid
                                            Sort Method: quicksort  Memory: 57kB
                                            Buffers: shared hit=274
                                            ->  Seq Scan on pg_catalog.pg_class r_6  (cost=0.00..313.84 rows=677 width=12) (actual time=0.008..1.020 rows=694 loops=1)
                                                  Output: r_6.oid, r_6.relowner, r_6.relnamespace
                                                  Filter: (r_6.relkind = ANY ('{r,p}'::"char"[]))
                                                  Rows Removed by Filter: 2559
                                                  Buffers: shared hit=274
                                      ->  Sort  (cost=171.10..175.50 rows=1760 width=95) (actual time=1.124..1.233 rows=1707 loops=1)
                                            Output: c_5.conname, c_5.conkey, c_5.conrelid, c_5.connamespace
                                            Sort Key: c_5.conrelid
                                            Sort Method: quicksort  Memory: 289kB
                                            Buffers: shared hit=52
                                            ->  Seq Scan on pg_catalog.pg_constraint c_5  (cost=0.00..76.23 rows=1760 width=95) (actual time=0.007..0.544 rows=1707 loops=1)
                                                  Output: c_5.conname, c_5.conkey, c_5.conrelid, c_5.connamespace
                                                  Filter: (c_5.contype = ANY ('{p,u,f}'::"char"[]))
                                                  Rows Removed by Filter: 2
                                                  Buffers: shared hit=52
                                ->  Materialize  (cost=0.00..1.09 rows=4 width=4) (actual time=0.000..0.001 rows=4 loops=1707)
                                      Output: nr_6.oid
                                      Buffers: shared hit=1
                                      ->  Seq Scan on pg_catalog.pg_namespace nr_6  (cost=0.00..1.07 rows=4 width=4) (actual time=0.006..0.013 rows=7 loops=1)
                                            Output: nr_6.oid
                                            Filter: (NOT pg_is_other_temp_schema(nr_6.oid))
                                            Rows Removed by Filter: 2
                                            Buffers: shared hit=1
                    ->  Sort  (cost=1.14..1.15 rows=6 width=4) (actual time=0.010..0.011 rows=9 loops=2)
                          Output: nc_4.oid
                          Sort Key: nc_4.oid
                          Sort Method: quicksort  Memory: 25kB
                          Buffers: shared hit=1
                          ->  Seq Scan on pg_catalog.pg_namespace nc_4  (cost=0.00..1.06 rows=6 width=4) (actual time=0.013..0.014 rows=9 loops=1)
                                Output: nc_4.oid
                                Buffers: shared hit=1
  ->  Index Scan using pg_attribute_relid_attnum_index on pg_catalog.pg_attribute a_1  (cost=0.29..0.33 rows=1 width=70) (actual time=0.015..0.015 rows=1 loops=2)
        Output: a_1.attrelid, a_1.attname, a_1.atttypid, a_1.attstattarget, a_1.attlen, a_1.attnum, a_1.attndims, a_1.attcacheoff, a_1.atttypmod, a_1.attbyval, a_1.attstorage, a_1.attalign, a_1.attnotnull, a_1.atthasdef, a_1.atthasmissing, a_1.attidentity, a_1.attgenerated, a_1.attisdropped, a_1.attislocal, a_1.attinhcount, a_1.attcollation, a_1.attacl, a_1.attoptions, a_1.attfdwoptions, a_1.attmissingval
        Index Cond: ((a_1.attrelid = r_6.oid) AND (a_1.attnum = ((information_schema._pg_expandarray(c_5.conkey))).x))
        Filter: ((NOT a_1.attisdropped) AND (pg_has_role(r_6.relowner, 'USAGE'::text) OR has_column_privilege(r_6.oid, a_1.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))
        Buffers: shared hit=6
Planning Time: 7.329 ms
Execution Time: 80.546 ms
server parameters (everything except random_page_cost )

allow_system_table_mods	off	Allows modifications of the structure of system tables.
application_name	pgAdmin 4 - CONN:6043198	Sets the application name to be reported in statistics and logs.
archive_cleanup_command		Sets the shell command that will be executed at every restart point.
archive_command	(disabled)	Sets the shell command that will be called to archive a WAL file.
archive_mode	off	Allows archiving of WAL files using archive_command.
archive_timeout	0	Forces a switch to the next WAL file if a new file has not been started within N seconds.
array_nulls	on	Enable input of NULL elements in arrays.
authentication_timeout	1min	Sets the maximum allowed time to complete client authentication.
autovacuum	on	Starts the autovacuum subprocess.
autovacuum_analyze_scale_factor	0.1	Number of tuple inserts, updates, or deletes prior to analyze as a fraction of reltuples.
autovacuum_analyze_threshold	50	Minimum number of tuple inserts, updates, or deletes prior to analyze.
autovacuum_freeze_max_age	200000000	Age at which to autovacuum a table to prevent transaction ID wraparound.
autovacuum_max_workers	3	Sets the maximum number of simultaneously running autovacuum worker processes.
autovacuum_multixact_freeze_max_age	400000000	Multixact age at which to autovacuum a table to prevent multixact wraparound.
autovacuum_naptime	1min	Time to sleep between autovacuum runs.
autovacuum_vacuum_cost_delay	2ms	Vacuum cost delay in milliseconds, for autovacuum.
autovacuum_vacuum_cost_limit	-1	Vacuum cost amount available before napping, for autovacuum.
autovacuum_vacuum_scale_factor	0.2	Number of tuple updates or deletes prior to vacuum as a fraction of reltuples.
autovacuum_vacuum_threshold	50	Minimum number of tuple updates or deletes prior to vacuum.
autovacuum_work_mem	-1	Sets the maximum memory to be used by each autovacuum worker process.
backend_flush_after	0	Number of pages after which previously performed writes are flushed to disk.
backslash_quote	safe_encoding	Sets whether "\'" is allowed in string literals.
bgwriter_delay	200ms	Background writer sleep time between rounds.
bgwriter_flush_after	0	Number of pages after which previously performed writes are flushed to disk.
bgwriter_lru_maxpages	100	Background writer maximum number of LRU pages to flush per round.
bgwriter_lru_multiplier	2	Multiple of the average buffer usage to free per round.
block_size	8192	Shows the size of a disk block.
bonjour	off	Enables advertising the server via Bonjour.
bonjour_name		Sets the Bonjour service name.
bytea_output	hex	Sets the output format for bytea.
check_function_bodies	on	Check function bodies during CREATE FUNCTION.
checkpoint_completion_target	0.5	Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval.
checkpoint_flush_after	0	Number of pages after which previously performed writes are flushed to disk.
checkpoint_timeout	5min	Sets the maximum time between automatic WAL checkpoints.
checkpoint_warning	30s	Enables warnings if checkpoint segments are filled more frequently than this.
client_encoding	UNICODE	Sets the client's character set encoding.
client_min_messages	notice	Sets the message levels that are sent to the client.
cluster_name		Sets the name of the cluster, which is included in the process title.
commit_delay	0	Sets the delay in microseconds between transaction commit and flushing WAL to disk.
commit_siblings	5	Sets the minimum concurrent open transactions before performing commit_delay.
config_file	D:/ASCDB/postgresql.conf	Sets the server's main configuration file.
constraint_exclusion	partition	Enables the planner to use constraints to optimize queries.
cpu_index_tuple_cost	0.005	Sets the planner's estimate of the cost of processing each index entry during an index scan.
cpu_operator_cost	0.0025	Sets the planner's estimate of the cost of processing each operator or function call.
cpu_tuple_cost	0.01	Sets the planner's estimate of the cost of processing each tuple (row).
cursor_tuple_fraction	0.1	Sets the planner's estimate of the fraction of a cursor's rows that will be retrieved.
data_checksums	off	Shows whether data checksums are turned on for this cluster.
data_directory	D:/ASCDB	Sets the server's data directory.
data_directory_mode	0700	Mode of the data directory.
data_sync_retry	off	Whether to continue running after a failure to sync data files.
DateStyle	ISO, DMY	Sets the display format for date and time values.
db_user_namespace	off	Enables per-database user names.
deadlock_timeout	1s	Sets the time to wait on a lock before checking for deadlock.
debug_assertions	off	Shows whether the running server has assertion checks enabled.
debug_pretty_print	on	Indents parse and plan tree displays.
debug_print_parse	off	Logs each query's parse tree.
debug_print_plan	off	Logs each query's execution plan.
debug_print_rewritten	off	Logs each query's rewritten parse tree.
default_statistics_target	100	Sets the default statistics target.
default_table_access_method	heap	Sets the default table access method for new tables.
default_tablespace		Sets the default tablespace to create tables and indexes in.
default_text_search_config	pg_catalog.english	Sets default text search configuration.
default_transaction_deferrable	off	Sets the default deferrable status of new transactions.
default_transaction_isolation	read committed	Sets the transaction isolation level of each new transaction.
default_transaction_read_only	off	Sets the default read-only status of new transactions.
dynamic_library_path	$libdir	Sets the path for dynamically loadable modules.
dynamic_shared_memory_type	windows	Selects the dynamic shared memory implementation used.
effective_cache_size	9GB	Sets the planner's assumption about the total size of the data caches.
effective_io_concurrency	0	Number of simultaneous requests that can be handled efficiently by the disk subsystem.
enable_bitmapscan	on	Enables the planner's use of bitmap-scan plans.
enable_gathermerge	on	Enables the planner's use of gather merge plans.
enable_hashagg	on	Enables the planner's use of hashed aggregation plans.
enable_hashjoin	on	Enables the planner's use of hash join plans.
enable_indexonlyscan	on	Enables the planner's use of index-only-scan plans.
enable_indexscan	on	Enables the planner's use of index-scan plans.
enable_material	on	Enables the planner's use of materialization.
enable_mergejoin	on	Enables the planner's use of merge join plans.
enable_nestloop	on	Enables the planner's use of nested-loop join plans.
enable_parallel_append	on	Enables the planner's use of parallel append plans.
enable_parallel_hash	on	Enables the planner's use of parallel hash plans.
enable_partition_pruning	on	Enables plan-time and run-time partition pruning.
enable_partitionwise_aggregate	off	Enables partitionwise aggregation and grouping.
enable_partitionwise_join	off	Enables partitionwise join.
enable_seqscan	on	Enables the planner's use of sequential-scan plans.
enable_sort	on	Enables the planner's use of explicit sort steps.
enable_tidscan	on	Enables the planner's use of TID scan plans.
escape_string_warning	on	Warn about backslash escapes in ordinary string literals.
event_source	PostgreSQL	Sets the application name used to identify PostgreSQL messages in the event log.
exit_on_error	off	Terminate session on any error.
external_pid_file		Writes the postmaster PID to the specified file.
extra_float_digits	1	Sets the number of digits displayed for floating-point values.
force_parallel_mode	off	Forces use of parallel query facilities.
from_collapse_limit	80	Sets the FROM-list size beyond which subqueries are not collapsed.
fsync	on	Forces synchronization of updates to disk.
full_page_writes	on	Writes full pages to WAL when first modified after a checkpoint.
geqo	on	Enables genetic query optimization.
geqo_effort	5	GEQO: effort is used to set the default for other GEQO parameters.
geqo_generations	0	GEQO: number of iterations of the algorithm.
geqo_pool_size	0	GEQO: number of individuals in the population.
geqo_seed	0	GEQO: seed for random path selection.
geqo_selection_bias	2	GEQO: selective pressure within the population.
geqo_threshold	12	Sets the threshold of FROM items beyond which GEQO is used.
gin_fuzzy_search_limit	0	Sets the maximum allowed result for exact search by GIN.
gin_pending_list_limit	4MB	Sets the maximum size of the pending list for GIN index.
hba_file	D:/ASCDB/pg_hba.conf	Sets the server's "hba" configuration file.
hot_standby	on	Allows connections and queries during recovery.
hot_standby_feedback	off	Allows feedback from a hot standby to the primary that will avoid query conflicts.
huge_pages	try	Use of huge pages on Linux or Windows.
ident_file	D:/ASCDB/pg_ident.conf	Sets the server's "ident" configuration file.
idle_in_transaction_session_timeout	0	Sets the maximum allowed duration of any idling transaction.
ignore_checksum_failure	off	Continues processing after a checksum failure.
ignore_system_indexes	off	Disables reading from system indexes.
integer_datetimes	on	Datetimes are integer based.
IntervalStyle	postgres	Sets the display format for interval values.
jit	on	Allow JIT compilation.
jit_above_cost	100000	Perform JIT compilation if query is more expensive.
jit_debugging_support	off	Register JIT compiled function with debugger.
jit_dump_bitcode	off	Write out LLVM bitcode to facilitate JIT debugging.
jit_expressions	on	Allow JIT compilation of expressions.
jit_inline_above_cost	500000	Perform JIT inlining if query is more expensive.
jit_optimize_above_cost	500000	Optimize JITed functions if query is more expensive.
jit_profiling_support	off	Register JIT compiled function with perf profiler.
jit_provider	llvmjit	JIT provider to use.
jit_tuple_deforming	on	Allow JIT compilation of tuple deforming.
join_collapse_limit	80	Sets the FROM-list size beyond which JOIN constructs are not flattened.
krb_caseins_users	off	Sets whether Kerberos and GSSAPI user names should be treated as case-insensitive.
krb_server_keyfile		Sets the location of the Kerberos server key file.
lc_collate	English_United Kingdom.1252	Shows the collation order locale.
lc_ctype	English_United Kingdom.1252	Shows the character classification and case conversion locale.
lc_messages	English_United States.1252	Sets the language in which messages are displayed.
lc_monetary	English_United States.1252	Sets the locale for formatting monetary amounts.
lc_numeric	English_United States.1252	Sets the locale for formatting numbers.
lc_time	English_United Kingdom.1252	Sets the locale for formatting date and time values.
listen_addresses	*	Sets the host name or IP address(es) to listen to.
lo_compat_privileges	off	Enables backward compatibility mode for privilege checks on large objects.
local_preload_libraries		Lists unprivileged shared libraries to preload into each backend.
lock_timeout	0	Sets the maximum allowed duration of any wait for a lock.
log_autovacuum_min_duration	-1	Sets the minimum execution time above which autovacuum actions will be logged.
log_checkpoints	off	Logs each checkpoint.
log_connections	off	Logs each successful connection.
log_destination	stderr	Sets the destination for server log output.
log_directory	log	Sets the destination directory for log files.
log_disconnections	off	Logs end of a session, including duration.
log_duration	off	Logs the duration of each completed SQL statement.
log_error_verbosity	default	Sets the verbosity of logged messages.
log_executor_stats	off	Writes executor performance statistics to the server log.
log_file_mode	0640	Sets the file permissions for log files.
log_filename	postgresql-%Y-%m-%d_%H%M%S.log	Sets the file name pattern for log files.
log_hostname	off	Logs the host name in the connection logs.
log_line_prefix	%m [%p] 	Controls information prefixed to each log line.
log_lock_waits	off	Logs long lock waits.
log_min_duration_statement	-1	Sets the minimum execution time above which statements will be logged.
log_min_error_statement	error	Causes all statements generating error at or above this level to be logged.
log_min_messages	warning	Sets the message levels that are logged.
log_parser_stats	off	Writes parser performance statistics to the server log.
log_planner_stats	off	Writes planner performance statistics to the server log.
log_replication_commands	off	Logs each replication command.
log_rotation_age	1d	Automatic log file rotation will occur after N minutes.
log_rotation_size	10MB	Automatic log file rotation will occur after N kilobytes.
log_statement	none	Sets the type of statements logged.
log_statement_stats	off	Writes cumulative performance statistics to the server log.
log_temp_files	-1	Log the use of temporary files larger than this number of kilobytes.
log_timezone	Europe/London	Sets the time zone to use in log messages.
log_transaction_sample_rate	0	Set the fraction of transactions to log for new transactions.
log_truncate_on_rotation	off	Truncate existing log files of same name during log rotation.
logging_collector	on	Start a subprocess to capture stderr output and/or csvlogs into log files.
maintenance_work_mem	2047MB	Sets the maximum memory to be used for maintenance operations.
max_connections	140	Sets the maximum number of concurrent connections.
max_files_per_process	1000	Sets the maximum number of simultaneously open files for each server process.
max_function_args	100	Shows the maximum number of function arguments.
max_identifier_length	63	Shows the maximum identifier length.
max_index_keys	32	Shows the maximum number of index keys.
max_locks_per_transaction	64	Sets the maximum number of locks per transaction.
max_logical_replication_workers	4	Maximum number of logical replication worker processes.
max_parallel_maintenance_workers	2	Sets the maximum number of parallel processes per maintenance operation.
max_parallel_workers	8	Sets the maximum number of parallel workers that can be active at one time.
max_parallel_workers_per_gather	2	Sets the maximum number of parallel processes per executor node.
max_pred_locks_per_page	2	Sets the maximum number of predicate-locked tuples per page.
max_pred_locks_per_relation	-2	Sets the maximum number of predicate-locked pages and tuples per relation.
max_pred_locks_per_transaction	64	Sets the maximum number of predicate locks per transaction.
max_prepared_transactions	0	Sets the maximum number of simultaneously prepared transactions.
max_replication_slots	10	Sets the maximum number of simultaneously defined replication slots.
max_stack_depth	2MB	Sets the maximum stack depth, in kilobytes.
max_standby_archive_delay	30s	Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data.
max_standby_streaming_delay	30s	Sets the maximum delay before canceling queries when a hot standby server is processing streamed WAL data.
max_sync_workers_per_subscription	2	Maximum number of table synchronization workers per subscription.
max_wal_senders	10	Sets the maximum number of simultaneously running WAL sender processes.
max_wal_size	2GB	Sets the WAL size that triggers a checkpoint.
max_worker_processes	8	Maximum number of concurrent worker processes.
min_parallel_index_scan_size	512kB	Sets the minimum amount of index data for a parallel scan.
min_parallel_table_scan_size	8MB	Sets the minimum amount of table data for a parallel scan.
min_wal_size	1GB	Sets the minimum size to shrink the WAL to.
old_snapshot_threshold	-1	Time before a snapshot is too old to read pages changed after the snapshot was taken.
operator_precedence_warning	off	Emit a warning for constructs that changed meaning since PostgreSQL 9.4.
parallel_leader_participation	on	Controls whether Gather and Gather Merge also run subplans.
parallel_setup_cost	1000	Sets the planner's estimate of the cost of starting up worker processes for parallel query.
parallel_tuple_cost	0.1	Sets the planner's estimate of the cost of passing each tuple (row) from worker to master backend.
password_encryption	md5	Chooses the algorithm for encrypting passwords.
plan_cache_mode	auto	Controls the planner's selection of custom or generic plan.
port	5432	Sets the TCP port the server listens on.
post_auth_delay	0	Waits N seconds on connection startup after authentication.
pre_auth_delay	0	Waits N seconds on connection startup before authentication.
primary_conninfo		Sets the connection string to be used to connect to the sending server.
primary_slot_name		Sets the name of the replication slot to use on the sending server.
promote_trigger_file		Specifies a file name whose presence ends recovery in the standby.
quote_all_identifiers	off	When generating SQL fragments, quote all identifiers.
random_page_cost	4	Sets the planner's estimate of the cost of a nonsequentially fetched disk page.
recovery_end_command		Sets the shell command that will be executed once at the end of recovery.
recovery_min_apply_delay	0	Sets the minimum delay for applying changes during recovery.
recovery_target		Set to "immediate" to end recovery as soon as a consistent state is reached.
recovery_target_action	pause	Sets the action to perform upon reaching the recovery target.
recovery_target_inclusive	on	Sets whether to include or exclude transaction with recovery target.
recovery_target_lsn		Sets the LSN of the write-ahead log location up to which recovery will proceed.
recovery_target_name		Sets the named restore point up to which recovery will proceed.
recovery_target_time		Sets the time stamp up to which recovery will proceed.
recovery_target_timeline	latest	Specifies the timeline to recover into.
recovery_target_xid		Sets the transaction ID up to which recovery will proceed.
restart_after_crash	on	Reinitialize server after backend crash.
restore_command		Sets the shell command that will retrieve an archived WAL file.
row_security	on	Enable row security.
search_path	"$user", public	Sets the schema search order for names that are not schema-qualified.
segment_size	1GB	Shows the number of pages per disk file.
seq_page_cost	1	Sets the planner's estimate of the cost of a sequentially fetched disk page.
server_encoding	UTF8	Sets the server (database) character set encoding.
server_version	12.5	Shows the server version.
server_version_num	120005	Shows the server version as an integer.
session_preload_libraries		Lists shared libraries to preload into each backend.
session_replication_role	origin	Sets the session's behavior for triggers and rewrite rules.
shared_buffers	5100MB	Sets the number of shared memory buffers used by the server.
shared_memory_type	windows	Selects the shared memory implementation used for the main shared memory region.
shared_preload_libraries		Lists shared libraries to preload into server.
ssl	off	Enables SSL connections.
ssl_ca_file		Location of the SSL certificate authority file.
ssl_cert_file	server.crt	Location of the SSL server certificate file.
ssl_ciphers	HIGH:MEDIUM:+3DES:!aNULL	Sets the list of allowed SSL ciphers.
ssl_crl_file		Location of the SSL certificate revocation list file.
ssl_dh_params_file		Location of the SSL DH parameters file.
ssl_ecdh_curve	prime256v1	Sets the curve to use for ECDH.
ssl_key_file	server.key	Location of the SSL server private key file.
ssl_library	OpenSSL	Name of the SSL library.
ssl_max_protocol_version		Sets the maximum SSL/TLS protocol version to use.
ssl_min_protocol_version	TLSv1	Sets the minimum SSL/TLS protocol version to use.
ssl_passphrase_command		Command to obtain passphrases for SSL.
ssl_passphrase_command_supports_reload	off	Also use ssl_passphrase_command during server reload.
ssl_prefer_server_ciphers	on	Give priority to server ciphersuite order.
standard_conforming_strings	on	Causes '...' strings to treat backslashes literally.
statement_timeout	0	Sets the maximum allowed duration of any statement.
stats_temp_directory	pg_stat_tmp	Writes temporary statistics files to the specified directory.
superuser_reserved_connections	3	Sets the number of connection slots reserved for superusers.
synchronize_seqscans	on	Enable synchronized sequential scans.
synchronous_commit	on	Sets the current transaction's synchronization level.
synchronous_standby_names		Number of synchronous standbys and list of names of potential synchronous ones.
syslog_facility	none	Sets the syslog "facility" to be used when syslog enabled.
syslog_ident	postgres	Sets the program name used to identify PostgreSQL messages in syslog.
syslog_sequence_numbers	on	Add sequence number to syslog messages to avoid duplicate suppression.
syslog_split_messages	on	Split messages sent to syslog by lines and to fit into 1024 bytes.
tcp_keepalives_count	0	Maximum number of TCP keepalive retransmits.
tcp_keepalives_idle	-1	Time between issuing TCP keepalives.
tcp_keepalives_interval	-1	Time between TCP keepalive retransmits.
tcp_user_timeout	0	TCP user timeout.
temp_buffers	8MB	Sets the maximum number of temporary buffers used by each session.
temp_file_limit	-1	Limits the total size of all temporary files used by each process.
temp_tablespaces		Sets the tablespace(s) to use for temporary tables and sort files.
TimeZone	Europe/London	Sets the time zone for displaying and interpreting time stamps.
timezone_abbreviations	Default	Selects a file of time zone abbreviations.
trace_notify	off	Generates debugging output for LISTEN and NOTIFY.
trace_recovery_messages	log	Enables logging of recovery-related debugging information.
trace_sort	off	Emit information about resource usage in sorting.
track_activities	on	Collects information about executing commands.
track_activity_query_size	1kB	Sets the size reserved for pg_stat_activity.query, in bytes.
track_commit_timestamp	off	Collects transaction commit time.
track_counts	on	Collects statistics on database activity.
track_functions	none	Collects function-level statistics on database activity.
track_io_timing	off	Collects timing statistics for database I/O activity.
transaction_deferrable	off	Whether to defer a read-only serializable transaction until it can be executed with no possible serialization failures.
transaction_isolation	read committed	Sets the current transaction's isolation level.
transaction_read_only	off	Sets the current transaction's read-only status.
transform_null_equals	off	Treats "expr=NULL" as "expr IS NULL".
unix_socket_directories		Sets the directories where Unix-domain sockets will be created.
unix_socket_group		Sets the owning group of the Unix-domain socket.
unix_socket_permissions	0777	Sets the access permissions of the Unix-domain socket.
update_process_title	off	Updates the process title to show the active SQL command.
vacuum_cleanup_index_scale_factor	0.1	Number of tuple inserts prior to index cleanup as a fraction of reltuples.
vacuum_cost_delay	0	Vacuum cost delay in milliseconds.
vacuum_cost_limit	200	Vacuum cost amount available before napping.
vacuum_cost_page_dirty	20	Vacuum cost for a page dirtied by vacuum.
vacuum_cost_page_hit	1	Vacuum cost for a page found in the buffer cache.
vacuum_cost_page_miss	10	Vacuum cost for a page not found in the buffer cache.
vacuum_defer_cleanup_age	0	Number of transactions by which VACUUM and HOT cleanup should be deferred, if any.
vacuum_freeze_min_age	50000000	Minimum age at which VACUUM should freeze a table row.
vacuum_freeze_table_age	150000000	Age at which VACUUM should scan whole table to freeze tuples.
vacuum_multixact_freeze_min_age	5000000	Minimum age at which VACUUM should freeze a MultiXactId in a table row.
vacuum_multixact_freeze_table_age	150000000	Multixact age at which VACUUM should scan whole table to freeze tuples.
wal_block_size	8192	Shows the block size in the write ahead log.
wal_buffers	16MB	Sets the number of disk-page buffers in shared memory for WAL.
wal_compression	off	Compresses full-page writes written in WAL file.
wal_consistency_checking		Sets the WAL resource managers for which WAL consistency checks are done.
wal_init_zero	on	Writes zeroes to new WAL files before first use.
wal_keep_segments	0	Sets the number of WAL files held for standby servers.
wal_level	replica	Set the level of information written to the WAL.
wal_log_hints	off	Writes full pages to WAL when first modified after a checkpoint, even for a non-critical modifications.
wal_receiver_status_interval	10s	Sets the maximum interval between WAL receiver status reports to the sending server.
wal_receiver_timeout	1min	Sets the maximum wait time to receive data from the sending server.
wal_recycle	on	Recycles WAL files by renaming them.
wal_retrieve_retry_interval	5s	Sets the time to wait before retrying to retrieve WAL after a failed attempt.
wal_segment_size	16MB	Shows the size of write ahead log segments.
wal_sender_timeout	1min	Sets the maximum time to wait for WAL replication.
wal_sync_method	open_datasync	Selects the method used for forcing WAL updates to disk.
wal_writer_delay	200ms	Time between WAL flushes performed in the WAL writer.
wal_writer_flush_after	1MB	Amount of WAL written out by WAL writer that triggers a flush.
work_mem	256MB	Sets the maximum memory to be used for query workspaces.
xmlbinary	base64	Sets how binary values are to be encoded in XML.
xmloption	content	Sets whether XML data in implicit parsing and serialization operations is to be considered as documents or content fragments.
zero_damaged_pages	off	Continues processing past damaged page headers.



[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux