Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f68b609

Browse files
committed
psql \dX: check schema when listing statistics objects
Commit ad600bb added psql command \dX listing extended statistics objects, but it failed to consider search_path when selecting the elements so some of the returned elements might be invisible. The visibility was already considered for tab completion (added by commit d99d58c), so adding it to the query is fairly simple. Reported and fix by Justin Pryzby, regression tests by me. Backpatch to PostgreSQL 14, where \dX was introduced. Batchpatch-through: 14 Author: Justin Pryzby Reviewed-by: Tatsuro Yamada Discussion: https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1
1 parent 085f931 commit f68b609

File tree

3 files changed

+40
-19
lines changed

3 files changed

+40
-19
lines changed

src/bin/psql/describe.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -4774,7 +4774,7 @@ listExtendedStats(const char *pattern)
47744774
processSQLNamePattern(pset.db, &buf, pattern,
47754775
false, false,
47764776
"es.stxnamespace::pg_catalog.regnamespace::text", "es.stxname",
4777-
NULL, NULL);
4777+
NULL, "pg_catalog.pg_statistics_obj_is_visible(es.oid)");
47784778

47794779
appendPQExpBufferStr(&buf, "ORDER BY 1, 2;");
47804780

src/test/regress/expected/stats_ext.out

+34-18
Original file line numberDiff line numberDiff line change
@@ -2991,6 +2991,7 @@ create statistics stts_s1.stts_foo on col1, col2 from stts_t3;
29912991
create statistics stts_s2.stts_yama (dependencies, mcv) on col1, col3 from stts_t3;
29922992
insert into stts_t1 select i,i from generate_series(1,100) i;
29932993
analyze stts_t1;
2994+
set search_path to public, stts_s1, stts_s2, tststats;
29942995
\dX
29952996
List of extended statistics
29962997
Schema | Name | Definition | Ndistinct | Dependencies | MCV
@@ -3006,7 +3007,7 @@ analyze stts_t1;
30063007
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
30073008
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
30083009
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3009-
tststats | priv_test_stats | a, b FROM tststats.priv_test_tbl | | | defined
3010+
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
30103011
(12 rows)
30113012

30123013
\dX stts_?
@@ -3041,7 +3042,7 @@ analyze stts_t1;
30413042
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
30423043
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
30433044
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3044-
tststats | priv_test_stats | a, b FROM tststats.priv_test_tbl | | | defined
3045+
tststats | priv_test_stats | a, b FROM priv_test_tbl | | | defined
30453046
(12 rows)
30463047

30473048
\dX+ stts_?
@@ -3068,30 +3069,45 @@ analyze stts_t1;
30683069
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
30693070
(1 row)
30703071

3072+
set search_path to public, stts_s1;
3073+
\dX
3074+
List of extended statistics
3075+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3076+
---------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3077+
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3078+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3079+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3080+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3081+
public | stts_1 | a, b FROM stts_t1 | defined | |
3082+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3083+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3084+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3085+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3086+
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3087+
(10 rows)
3088+
30713089
create role regress_stats_ext nosuperuser;
30723090
set role regress_stats_ext;
30733091
\dX
3074-
List of extended statistics
3075-
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3076-
----------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3077-
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3078-
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3079-
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3080-
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3081-
public | stts_1 | a, b FROM stts_t1 | defined | |
3082-
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3083-
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3084-
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3085-
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3086-
stts_s1 | stts_foo | col1, col2 FROM stts_t3 | defined | defined | defined
3087-
stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | defined | defined
3088-
tststats | priv_test_stats | a, b FROM tststats.priv_test_tbl | | | defined
3089-
(12 rows)
3092+
List of extended statistics
3093+
Schema | Name | Definition | Ndistinct | Dependencies | MCV
3094+
--------+------------------------+------------------------------------------------------------------------+-----------+--------------+---------
3095+
public | func_deps_stat | ((a * 2)), upper(b), ((c + (1)::numeric)) FROM functional_dependencies | | defined |
3096+
public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | defined
3097+
public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | defined
3098+
public | mcv_lists_stats | a, b, d FROM mcv_lists | | | defined
3099+
public | stts_1 | a, b FROM stts_t1 | defined | |
3100+
public | stts_2 | a, b FROM stts_t1 | defined | defined |
3101+
public | stts_3 | a, b FROM stts_t1 | defined | defined | defined
3102+
public | stts_4 | b, c FROM stts_t2 | defined | defined | defined
3103+
public | stts_hoge | col1, col2, col3 FROM stts_t3 | defined | defined | defined
3104+
(9 rows)
30903105

30913106
reset role;
30923107
drop table stts_t1, stts_t2, stts_t3;
30933108
drop schema stts_s1, stts_s2 cascade;
30943109
drop user regress_stats_ext;
3110+
reset search_path;
30953111
-- User with no access
30963112
CREATE USER regress_stats_user1;
30973113
GRANT USAGE ON SCHEMA tststats TO regress_stats_user1;

src/test/regress/sql/stats_ext.sql

+5
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,7 @@ create statistics stts_s2.stts_yama (dependencies, mcv) on col1, col3 from stts_
15291529

15301530
insert into stts_t1 select i,i from generate_series(1,100) i;
15311531
analyze stts_t1;
1532+
set search_path to public, stts_s1, stts_s2, tststats;
15321533

15331534
\dX
15341535
\dX stts_?
@@ -1538,6 +1539,9 @@ analyze stts_t1;
15381539
\dX+ *stts_hoge
15391540
\dX+ stts_s2.stts_yama
15401541

1542+
set search_path to public, stts_s1;
1543+
\dX
1544+
15411545
create role regress_stats_ext nosuperuser;
15421546
set role regress_stats_ext;
15431547
\dX
@@ -1546,6 +1550,7 @@ reset role;
15461550
drop table stts_t1, stts_t2, stts_t3;
15471551
drop schema stts_s1, stts_s2 cascade;
15481552
drop user regress_stats_ext;
1553+
reset search_path;
15491554

15501555
-- User with no access
15511556
CREATE USER regress_stats_user1;

0 commit comments

Comments
 (0)