diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index aaf55df9215..221a967bfe6 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -1918,28 +1918,6 @@ testdb=>
-
-
- \dX [ pattern ]
-
-
- Lists extended statistics.
- If pattern
- is specified, only those extended statistics whose names match the
- pattern are listed.
- If + is appended to the command name, each extended
- statistics is listed with its size.
-
-
-
- The column of the kind of extended stats (e.g. Ndistinct) shows some statuses.
- "requested" means that it needs to collect statistics by ANALYZE.
- "built" means ANALYZE was
- finished, and the planner can use it. NULL means that it doesn't exists.
-
-
-
\dy[+] [ pattern ]
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index c5ebc1c3f41..303e7c3ad8b 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -928,9 +928,6 @@ exec_command_d(PsqlScanState scan_state, bool active_branch, const char *cmd)
else
success = listExtensions(pattern);
break;
- case 'X': /* Extended Statistics */
- success = listExtendedStats(pattern, show_verbose);
- break;
case 'y': /* Event Triggers */
success = listEventTriggers(pattern, show_verbose);
break;
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index c2051ee8207..caf97563f48 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -4392,156 +4392,6 @@ listEventTriggers(const char *pattern, bool verbose)
return true;
}
-/*
- * \dX
- *
- * Describes extended statistics.
- */
-bool
-listExtendedStats(const char *pattern, bool verbose)
-{
- PQExpBufferData buf;
- PGresult *res;
- printQueryOpt myopt = pset.popt;
-
- if (pset.sversion < 100000)
- {
- char sverbuf[32];
-
- pg_log_error("The server (version %s) does not support extended statistics.",
- formatPGVersionNumber(pset.sversion, false,
- sverbuf, sizeof(sverbuf)));
- return true;
- }
-
- initPQExpBuffer(&buf);
- printfPQExpBuffer(&buf,
- "SELECT \n"
- "es.stxnamespace::pg_catalog.regnamespace::text AS \"%s\", \n"
- "es.stxname AS \"%s\", \n"
- "pg_catalog.format('%%s FROM %%s', \n"
- " (SELECT pg_catalog.string_agg(pg_catalog.quote_ident(a.attname),', ') \n"
- " FROM pg_catalog.unnest(es.stxkeys) s(attnum) \n"
- " JOIN pg_catalog.pg_attribute a \n"
- " ON (es.stxrelid = a.attrelid \n"
- " AND a.attnum = s.attnum \n"
- " AND NOT a.attisdropped)), \n"
- "es.stxrelid::regclass) AS \"%s\"",
- gettext_noop("Schema"),
- gettext_noop("Name"),
- gettext_noop("Definition"));
-
- /*
- * Since 12 there are two catalogs - one for the definition, one for the
- * data built by ANALYZE. Older releases use a single catalog. Also, 12
- * adds the MCV statistics kind.
- */
- if (pset.sversion < 120000)
- {
- appendPQExpBuffer(&buf,
- ",\nCASE WHEN es.stxndistinct IS NOT NULL THEN 'built' \n"
- " WHEN 'd' = any(es.stxkind) THEN 'requested' \n"
- "END AS \"%s\", \n"
- "CASE WHEN es.stxdependencies IS NOT NULL THEN 'built' \n"
- " WHEN 'f' = any(es.stxkind) THEN 'requested' \n"
- "END AS \"%s\"",
- gettext_noop("Ndistinct"),
- gettext_noop("Dependencies"));
- }
- else
- {
- appendPQExpBuffer(&buf,
- ",\nCASE WHEN esd.stxdndistinct IS NOT NULL THEN 'built' \n"
- " WHEN 'd' = any(es.stxkind) THEN 'requested' \n"
- "END AS \"%s\", \n"
- "CASE WHEN esd.stxddependencies IS NOT NULL THEN 'built' \n"
- " WHEN 'f' = any(es.stxkind) THEN 'requested' \n"
- "END AS \"%s\", \n"
- "CASE WHEN esd.stxdmcv IS NOT NULL THEN 'built' \n"
- " WHEN 'm' = any(es.stxkind) THEN 'requested' \n"
- "END AS \"%s\"",
- gettext_noop("Ndistinct"),
- gettext_noop("Dependencies"),
- gettext_noop("MCV"));
- }
-
- /* In verbose mode, print sizes of the extended statistics objects. */
- if (verbose)
- {
- if (pset.sversion < 120000)
- {
- appendPQExpBuffer(&buf,
- ",\nCASE WHEN es.stxndistinct IS NOT NULL THEN \n"
- " pg_catalog.pg_size_pretty(pg_catalog.length(es.stxndistinct)::bigint) \n"
- " WHEN 'd' = any(es.stxkind) THEN '0 bytes' \n"
- "END AS \"%s\", \n"
- "CASE WHEN es.stxdependencies IS NOT NULL THEN \n"
- " pg_catalog.pg_size_pretty(pg_catalog.length(es.stxdependencies)::bigint) \n"
- " WHEN 'f' = any(es.stxkind) THEN '0 bytes' \n"
- "END AS \"%s\"",
- gettext_noop("Ndistinct_size"),
- gettext_noop("Dependencies_size"));
- }
- else
- {
- appendPQExpBuffer(&buf,
- ",\nCASE WHEN esd.stxdndistinct IS NOT NULL THEN \n"
- " pg_catalog.pg_size_pretty(pg_catalog.length(esd.stxdndistinct)::bigint) \n"
- " WHEN 'd' = any(es.stxkind) THEN '0 bytes' \n"
- "END AS \"%s\", \n"
- "CASE WHEN esd.stxddependencies IS NOT NULL THEN \n"
- " pg_catalog.pg_size_pretty(pg_catalog.length(esd.stxddependencies)::bigint) \n"
- " WHEN 'f' = any(es.stxkind) THEN '0 bytes' \n"
- "END AS \"%s\", \n"
- "CASE WHEN esd.stxdmcv IS NOT NULL THEN \n"
- " pg_catalog.pg_size_pretty(pg_catalog.length(esd.stxdmcv)::bigint) \n"
- " WHEN 'm' = any(es.stxkind) THEN '0 bytes' \n"
- "END AS \"%s\"",
- gettext_noop("Ndistinct_size"),
- gettext_noop("Dependencies_size"),
- gettext_noop("MCV_size"));
- }
- }
-
- if (pset.sversion < 120000)
- {
- appendPQExpBufferStr(&buf,
- " \nFROM pg_catalog.pg_statistic_ext es \n"
- "INNER JOIN pg_catalog.pg_class c \n"
- "ON es.stxrelid = c.oid \n");
- }
- else
- {
- appendPQExpBufferStr(&buf,
- " \nFROM pg_catalog.pg_statistic_ext es \n"
- "LEFT JOIN pg_catalog.pg_statistic_ext_data esd \n"
- "ON es.oid = esd.stxoid \n"
- "INNER JOIN pg_catalog.pg_class c \n"
- "ON es.stxrelid = c.oid \n");
- }
-
- processSQLNamePattern(pset.db, &buf, pattern, false,
- false, NULL,
- "es.stxname", NULL,
- NULL);
-
- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;");
-
- res = PSQLexec(buf.data);
- termPQExpBuffer(&buf);
- if (!res)
- return false;
-
- myopt.nullPrint = NULL;
- myopt.title = _("List of extended statistics");
- myopt.translate_header = true;
-
- printQuery(res, &myopt, pset.queryFout, false, pset.logfile);
-
- PQclear(res);
- return true;
-}
-
/*
* \dC
*
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index 867e57d851e..6044e3a0828 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -102,9 +102,6 @@ extern bool listExtensions(const char *pattern);
/* \dx+ */
extern bool listExtensionContents(const char *pattern);
-/* \dX */
-extern bool listExtendedStats(const char *pattern, bool verbose);
-
/* \dy */
extern bool listEventTriggers(const char *pattern, bool verbose);
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index e42bc8c54e0..9ec1c4e810c 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -267,7 +267,6 @@ slashUsage(unsigned short int pager)
fprintf(output, _(" \\du[S+] [PATTERN] list roles\n"));
fprintf(output, _(" \\dv[S+] [PATTERN] list views\n"));
fprintf(output, _(" \\dx[+] [PATTERN] list extensions\n"));
- fprintf(output, _(" \\dX[+] [PATTERN] list extended statistics\n"));
fprintf(output, _(" \\dy [PATTERN] list event triggers\n"));
fprintf(output, _(" \\l[+] [PATTERN] list databases\n"));
fprintf(output, _(" \\sf[+] FUNCNAME show a function's definition\n"));
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 17f72650388..6abcbea9634 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -1505,7 +1505,7 @@ psql_completion(const char *text, int start, int end)
"\\dF", "\\dFd", "\\dFp", "\\dFt", "\\dg", "\\di", "\\dl", "\\dL",
"\\dm", "\\dn", "\\do", "\\dO", "\\dp", "\\dP", "\\dPi", "\\dPt",
"\\drds", "\\dRs", "\\dRp", "\\ds", "\\dS",
- "\\dt", "\\dT", "\\dv", "\\du", "\\dx", "\\dX", "\\dy",
+ "\\dt", "\\dT", "\\dv", "\\du", "\\dx", "\\dy",
"\\e", "\\echo", "\\ef", "\\elif", "\\else", "\\encoding",
"\\endif", "\\errverbose", "\\ev",
"\\f",
@@ -3974,8 +3974,6 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
else if (TailMatchesCS("\\dx*"))
COMPLETE_WITH_QUERY(Query_for_list_of_extensions);
- else if (TailMatchesCS("\\dX*"))
- COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_statistics, NULL);
else if (TailMatchesCS("\\dm*"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_matviews, NULL);
else if (TailMatchesCS("\\dE*"))
diff --git a/src/test/regress/expected/stats_ext.out b/src/test/regress/expected/stats_ext.out
index 1531d062957..f094731e328 100644
--- a/src/test/regress/expected/stats_ext.out
+++ b/src/test/regress/expected/stats_ext.out
@@ -1727,100 +1727,6 @@ INSERT INTO tststats.priv_test_tbl
CREATE STATISTICS tststats.priv_test_stats (mcv) ON a, b
FROM tststats.priv_test_tbl;
ANALYZE tststats.priv_test_tbl;
--- Check printing info about extended statistics by \dX
-create table stts_t1 (a int, b int);
-create statistics stts_1 (ndistinct) on a, b from stts_t1;
-create statistics stts_2 (ndistinct, dependencies) on a, b from stts_t1;
-create statistics stts_3 (ndistinct, dependencies, mcv) on a, b from stts_t1;
-create table stts_t2 (a int, b int, c int);
-create statistics stts_4 on b, c from stts_t2;
-create table stts_t3 (col1 int, col2 int, col3 int);
-create statistics stts_hoge on col1, col2, col3 from stts_t3;
-create schema stts_s1;
-create schema stts_s2;
-create statistics stts_s1.stts_foo on col1, col2 from stts_t3;
-create statistics stts_s2.stts_yama (dependencies, mcv) on col1, col3 from stts_t3;
-insert into stts_t1 select i,i from generate_series(1,100) i;
-analyze stts_t1;
-\dX
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV
-----------+------------------------+--------------------------------------+-----------+--------------+-----------
- public | func_deps_stat | a, b, c FROM functional_dependencies | | built |
- public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | built
- public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | built
- public | mcv_lists_stats | a, b, d FROM mcv_lists | | | built
- public | stts_1 | a, b FROM stts_t1 | built | |
- public | stts_2 | a, b FROM stts_t1 | built | built |
- public | stts_3 | a, b FROM stts_t1 | built | built | built
- public | stts_4 | b, c FROM stts_t2 | requested | requested | requested
- public | stts_hoge | col1, col2, col3 FROM stts_t3 | requested | requested | requested
- stts_s1 | stts_foo | col1, col2 FROM stts_t3 | requested | requested | requested
- stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | requested | requested
- tststats | priv_test_stats | a, b FROM tststats.priv_test_tbl | | | built
-(12 rows)
-
-\dX stts_?
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV
---------+--------+-------------------+-----------+--------------+-----------
- public | stts_1 | a, b FROM stts_t1 | built | |
- public | stts_2 | a, b FROM stts_t1 | built | built |
- public | stts_3 | a, b FROM stts_t1 | built | built | built
- public | stts_4 | b, c FROM stts_t2 | requested | requested | requested
-(4 rows)
-
-\dX *stts_hoge
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV
---------+-----------+-------------------------------+-----------+--------------+-----------
- public | stts_hoge | col1, col2, col3 FROM stts_t3 | requested | requested | requested
-(1 row)
-
-\dX+
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV | Ndistinct_size | Dependencies_size | MCV_size
-----------+------------------------+--------------------------------------+-----------+--------------+-----------+----------------+-------------------+------------
- public | func_deps_stat | a, b, c FROM functional_dependencies | | built | | | 106 bytes |
- public | mcv_lists_arrays_stats | a, b, c FROM mcv_lists_arrays | | | built | | | 24 kB
- public | mcv_lists_bool_stats | a, b, c FROM mcv_lists_bool | | | built | | | 386 bytes
- public | mcv_lists_stats | a, b, d FROM mcv_lists | | | built | | | 294 bytes
- public | stts_1 | a, b FROM stts_t1 | built | | | 13 bytes | |
- public | stts_2 | a, b FROM stts_t1 | built | built | | 13 bytes | 40 bytes |
- public | stts_3 | a, b FROM stts_t1 | built | built | built | 13 bytes | 40 bytes | 6126 bytes
- public | stts_4 | b, c FROM stts_t2 | requested | requested | requested | 0 bytes | 0 bytes | 0 bytes
- public | stts_hoge | col1, col2, col3 FROM stts_t3 | requested | requested | requested | 0 bytes | 0 bytes | 0 bytes
- stts_s1 | stts_foo | col1, col2 FROM stts_t3 | requested | requested | requested | 0 bytes | 0 bytes | 0 bytes
- stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | requested | requested | | 0 bytes | 0 bytes
- tststats | priv_test_stats | a, b FROM tststats.priv_test_tbl | | | built | | | 686 bytes
-(12 rows)
-
-\dX+ stts_?
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV | Ndistinct_size | Dependencies_size | MCV_size
---------+--------+-------------------+-----------+--------------+-----------+----------------+-------------------+------------
- public | stts_1 | a, b FROM stts_t1 | built | | | 13 bytes | |
- public | stts_2 | a, b FROM stts_t1 | built | built | | 13 bytes | 40 bytes |
- public | stts_3 | a, b FROM stts_t1 | built | built | built | 13 bytes | 40 bytes | 6126 bytes
- public | stts_4 | b, c FROM stts_t2 | requested | requested | requested | 0 bytes | 0 bytes | 0 bytes
-(4 rows)
-
-\dX+ *stts_hoge
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV | Ndistinct_size | Dependencies_size | MCV_size
---------+-----------+-------------------------------+-----------+--------------+-----------+----------------+-------------------+----------
- public | stts_hoge | col1, col2, col3 FROM stts_t3 | requested | requested | requested | 0 bytes | 0 bytes | 0 bytes
-(1 row)
-
-\dX+ stts_s2.stts_yama
- List of extended statistics
- Schema | Name | Definition | Ndistinct | Dependencies | MCV | Ndistinct_size | Dependencies_size | MCV_size
----------+-----------+-------------------------+-----------+--------------+-----------+----------------+-------------------+----------
- stts_s2 | stts_yama | col1, col3 FROM stts_t3 | | requested | requested | | 0 bytes | 0 bytes
-(1 row)
-
-drop table stts_t1, stts_t2, stts_t3;
-drop schema stts_s1, stts_s2 cascade;
-- User with no access
CREATE USER regress_stats_user1;
GRANT USAGE ON SCHEMA tststats TO regress_stats_user1;
diff --git a/src/test/regress/sql/stats_ext.sql b/src/test/regress/sql/stats_ext.sql
index c83840298e8..cb08b478a42 100644
--- a/src/test/regress/sql/stats_ext.sql
+++ b/src/test/regress/sql/stats_ext.sql
@@ -914,37 +914,6 @@ CREATE STATISTICS tststats.priv_test_stats (mcv) ON a, b
ANALYZE tststats.priv_test_tbl;
--- Check printing info about extended statistics by \dX
-create table stts_t1 (a int, b int);
-create statistics stts_1 (ndistinct) on a, b from stts_t1;
-create statistics stts_2 (ndistinct, dependencies) on a, b from stts_t1;
-create statistics stts_3 (ndistinct, dependencies, mcv) on a, b from stts_t1;
-
-create table stts_t2 (a int, b int, c int);
-create statistics stts_4 on b, c from stts_t2;
-
-create table stts_t3 (col1 int, col2 int, col3 int);
-create statistics stts_hoge on col1, col2, col3 from stts_t3;
-
-create schema stts_s1;
-create schema stts_s2;
-create statistics stts_s1.stts_foo on col1, col2 from stts_t3;
-create statistics stts_s2.stts_yama (dependencies, mcv) on col1, col3 from stts_t3;
-
-insert into stts_t1 select i,i from generate_series(1,100) i;
-analyze stts_t1;
-
-\dX
-\dX stts_?
-\dX *stts_hoge
-\dX+
-\dX+ stts_?
-\dX+ *stts_hoge
-\dX+ stts_s2.stts_yama
-
-drop table stts_t1, stts_t2, stts_t3;
-drop schema stts_s1, stts_s2 cascade;
-
-- User with no access
CREATE USER regress_stats_user1;
GRANT USAGE ON SCHEMA tststats TO regress_stats_user1;