@ -18,6 +18,8 @@ SET enable_indexscan TO on;
SET enable_indexonlyscan TO off;
SET enable_indexonlyscan TO off;
-- not enabled by default, but we want to test it...
-- not enabled by default, but we want to test it...
SET track_functions TO 'all';
SET track_functions TO 'all';
-- record dboid for later use
SELECT oid AS dboid from pg_database where datname = current_database() \gset
-- save counters
-- save counters
BEGIN;
BEGIN;
SET LOCAL stats_fetch_consistency = snapshot;
SET LOCAL stats_fetch_consistency = snapshot;
@ -777,18 +779,121 @@ SELECT pg_stat_have_stats('bgwriter', 0, 0);
SELECT pg_stat_have_stats('zaphod', 0, 0);
SELECT pg_stat_have_stats('zaphod', 0, 0);
ERROR: invalid statistics kind: "zaphod"
ERROR: invalid statistics kind: "zaphod"
-- db stats have objoid 0
-- db stats have objoid 0
SELECT pg_stat_have_stats('database', (SELECT oid FROM pg_database WHERE datname = current_database()) , 1);
SELECT pg_stat_have_stats('database', :dboid , 1);
pg_stat_have_stats
pg_stat_have_stats
--------------------
--------------------
f
f
(1 row)
(1 row)
SELECT pg_stat_have_stats('database', (SELECT oid FROM pg_database WHERE datname = current_database()) , 0);
SELECT pg_stat_have_stats('database', :dboid , 0);
pg_stat_have_stats
pg_stat_have_stats
--------------------
--------------------
t
t
(1 row)
(1 row)
-- pg_stat_have_stats returns true for committed index creation
CREATE table stats_test_tab1 as select generate_series(1,10) a;
CREATE index stats_test_idx1 on stats_test_tab1(a);
SELECT 'stats_test_idx1'::regclass::oid AS stats_test_idx1_oid \gset
SET enable_seqscan TO off;
select a from stats_test_tab1 where a = 3;
a
---
3
(1 row)
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
-- pg_stat_have_stats returns false for dropped index with stats
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
DROP index stats_test_idx1;
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
f
(1 row)
-- pg_stat_have_stats returns false for rolled back index creation
BEGIN;
CREATE index stats_test_idx1 on stats_test_tab1(a);
SELECT 'stats_test_idx1'::regclass::oid AS stats_test_idx1_oid \gset
select a from stats_test_tab1 where a = 3;
a
---
3
(1 row)
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
ROLLBACK;
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
f
(1 row)
-- pg_stat_have_stats returns true for reindex CONCURRENTLY
CREATE index stats_test_idx1 on stats_test_tab1(a);
SELECT 'stats_test_idx1'::regclass::oid AS stats_test_idx1_oid \gset
select a from stats_test_tab1 where a = 3;
a
---
3
(1 row)
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
REINDEX index CONCURRENTLY stats_test_idx1;
-- false for previous oid
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
f
(1 row)
-- true for new oid
SELECT 'stats_test_idx1'::regclass::oid AS stats_test_idx1_oid \gset
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
-- pg_stat_have_stats returns true for a rolled back drop index with stats
BEGIN;
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
DROP index stats_test_idx1;
ROLLBACK;
SELECT pg_stat_have_stats('relation', :dboid, :stats_test_idx1_oid);
pg_stat_have_stats
--------------------
t
(1 row)
-- put enable_seqscan back to on
SET enable_seqscan TO on;
-- ensure that stats accessors handle NULL input correctly
-- ensure that stats accessors handle NULL input correctly
SELECT pg_stat_get_replication_slot(NULL);
SELECT pg_stat_get_replication_slot(NULL);
pg_stat_get_replication_slot
pg_stat_get_replication_slot