Add access method names to \d[i|m|t]+ in psql
Listing a full set of relations with those psql meta-commands, without a matching pattern, has never showed the access method associated with each relation. This commit adds the access method of tables, indexes and matviews, masking it for relation kinds where it does not apply. Note that when HIDE_TABLEAM is enabled, the information does not show up. This is available when connecting to a backend version of at least 12, where table AMs have been introduced. Author: Georgios Kokolatos Reviewed-by: Vignesh C, Michael Paquier, Justin Pryzby Discussion: https://postgr.es/m/svaS1VTOEscES9CLKVTeKItjJP1EEJuBhTsA0ESOdlnbXeQSgycYwVlliL5zt8Jwcfo4ATYDXtEqsExxjkSkkhCSTCL8fnRgaCAJdr0unUg=@protonmail.com
This commit is contained in:
parent
01767533e3
commit
07f386ede0
@ -1183,7 +1183,9 @@ testdb=>
|
||||
columns of the table are shown, as is the presence of OIDs in the
|
||||
table, the view definition if the relation is a view, a non-default
|
||||
<link linkend="sql-createtable-replica-identity">replica
|
||||
identity</link> setting.
|
||||
identity</link> setting and the
|
||||
<link linkend="sql-create-access-method">access method</link> name
|
||||
if the relation has an access method.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -3678,7 +3678,7 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
|
||||
PGresult *res;
|
||||
printQueryOpt myopt = pset.popt;
|
||||
int cols_so_far;
|
||||
bool translate_columns[] = {false, false, true, false, false, false, false, false};
|
||||
bool translate_columns[] = {false, false, true, false, false, false, false, false, false};
|
||||
|
||||
/* If tabtypes is empty, we default to \dtvmsE (but see also command.c) */
|
||||
if (!(showTables || showIndexes || showViews || showMatViews || showSeq || showForeign))
|
||||
@ -3751,6 +3751,16 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
|
||||
* to; this might change with future additions to the output columns.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Access methods exist for tables, materialized views and indexes.
|
||||
* This has been introduced in PostgreSQL 12 for tables.
|
||||
*/
|
||||
if (pset.sversion >= 120000 && !pset.hide_tableam &&
|
||||
(showTables || showMatViews || showIndexes))
|
||||
appendPQExpBuffer(&buf,
|
||||
",\n am.amname as \"%s\"",
|
||||
gettext_noop("Access Method"));
|
||||
|
||||
/*
|
||||
* As of PostgreSQL 9.0, use pg_table_size() to show a more accurate
|
||||
* size of a table, including FSM, VM and TOAST tables.
|
||||
@ -3772,6 +3782,12 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
|
||||
appendPQExpBufferStr(&buf,
|
||||
"\nFROM pg_catalog.pg_class c"
|
||||
"\n LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace");
|
||||
|
||||
if (pset.sversion >= 120000 && !pset.hide_tableam &&
|
||||
(showTables || showMatViews || showIndexes))
|
||||
appendPQExpBufferStr(&buf,
|
||||
"\n LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam");
|
||||
|
||||
if (showIndexes)
|
||||
appendPQExpBufferStr(&buf,
|
||||
"\n LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid"
|
||||
|
@ -2795,20 +2795,28 @@ Argument data types | numeric
|
||||
Type | func
|
||||
|
||||
\pset tuples_only false
|
||||
-- check conditional tableam display
|
||||
-- Create a heap2 table am handler with heapam handler
|
||||
-- check conditional am display
|
||||
\pset expanded off
|
||||
CREATE SCHEMA tableam_display;
|
||||
CREATE ROLE regress_display_role;
|
||||
ALTER SCHEMA tableam_display OWNER TO regress_display_role;
|
||||
SET search_path TO tableam_display;
|
||||
CREATE ACCESS METHOD heap_psql TYPE TABLE HANDLER heap_tableam_handler;
|
||||
SET ROLE TO regress_display_role;
|
||||
-- Use only relations with a physical size of zero.
|
||||
CREATE TABLE tbl_heap_psql(f1 int, f2 char(100)) using heap_psql;
|
||||
CREATE TABLE tbl_heap(f1 int, f2 char(100)) using heap;
|
||||
CREATE VIEW view_heap_psql AS SELECT f1 from tbl_heap_psql;
|
||||
CREATE MATERIALIZED VIEW mat_view_heap_psql USING heap_psql AS SELECT f1 from tbl_heap_psql;
|
||||
\d+ tbl_heap_psql
|
||||
Table "public.tbl_heap_psql"
|
||||
Table "tableam_display.tbl_heap_psql"
|
||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||
--------+----------------+-----------+----------+---------+----------+--------------+-------------
|
||||
f1 | integer | | | | plain | |
|
||||
f2 | character(100) | | | | extended | |
|
||||
|
||||
\d+ tbl_heap
|
||||
Table "public.tbl_heap"
|
||||
Table "tableam_display.tbl_heap"
|
||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||
--------+----------------+-----------+----------+---------+----------+--------------+-------------
|
||||
f1 | integer | | | | plain | |
|
||||
@ -2816,7 +2824,7 @@ CREATE TABLE tbl_heap(f1 int, f2 char(100)) using heap;
|
||||
|
||||
\set HIDE_TABLEAM off
|
||||
\d+ tbl_heap_psql
|
||||
Table "public.tbl_heap_psql"
|
||||
Table "tableam_display.tbl_heap_psql"
|
||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||
--------+----------------+-----------+----------+---------+----------+--------------+-------------
|
||||
f1 | integer | | | | plain | |
|
||||
@ -2824,16 +2832,68 @@ CREATE TABLE tbl_heap(f1 int, f2 char(100)) using heap;
|
||||
Access method: heap_psql
|
||||
|
||||
\d+ tbl_heap
|
||||
Table "public.tbl_heap"
|
||||
Table "tableam_display.tbl_heap"
|
||||
Column | Type | Collation | Nullable | Default | Storage | Stats target | Description
|
||||
--------+----------------+-----------+----------+---------+----------+--------------+-------------
|
||||
f1 | integer | | | | plain | |
|
||||
f2 | character(100) | | | | extended | |
|
||||
Access method: heap
|
||||
|
||||
-- AM is displayed for tables, indexes and materialized views.
|
||||
\d+
|
||||
List of relations
|
||||
Schema | Name | Type | Owner | Persistence | Access Method | Size | Description
|
||||
-----------------+--------------------+-------------------+----------------------+-------------+---------------+---------+-------------
|
||||
tableam_display | mat_view_heap_psql | materialized view | regress_display_role | permanent | heap_psql | 0 bytes |
|
||||
tableam_display | tbl_heap | table | regress_display_role | permanent | heap | 0 bytes |
|
||||
tableam_display | tbl_heap_psql | table | regress_display_role | permanent | heap_psql | 0 bytes |
|
||||
tableam_display | view_heap_psql | view | regress_display_role | permanent | | 0 bytes |
|
||||
(4 rows)
|
||||
|
||||
\dt+
|
||||
List of relations
|
||||
Schema | Name | Type | Owner | Persistence | Access Method | Size | Description
|
||||
-----------------+---------------+-------+----------------------+-------------+---------------+---------+-------------
|
||||
tableam_display | tbl_heap | table | regress_display_role | permanent | heap | 0 bytes |
|
||||
tableam_display | tbl_heap_psql | table | regress_display_role | permanent | heap_psql | 0 bytes |
|
||||
(2 rows)
|
||||
|
||||
\dm+
|
||||
List of relations
|
||||
Schema | Name | Type | Owner | Persistence | Access Method | Size | Description
|
||||
-----------------+--------------------+-------------------+----------------------+-------------+---------------+---------+-------------
|
||||
tableam_display | mat_view_heap_psql | materialized view | regress_display_role | permanent | heap_psql | 0 bytes |
|
||||
(1 row)
|
||||
|
||||
-- But not for views and sequences.
|
||||
\dv+
|
||||
List of relations
|
||||
Schema | Name | Type | Owner | Persistence | Size | Description
|
||||
-----------------+----------------+------+----------------------+-------------+---------+-------------
|
||||
tableam_display | view_heap_psql | view | regress_display_role | permanent | 0 bytes |
|
||||
(1 row)
|
||||
|
||||
\set HIDE_TABLEAM on
|
||||
DROP TABLE tbl_heap, tbl_heap_psql;
|
||||
\d+
|
||||
List of relations
|
||||
Schema | Name | Type | Owner | Persistence | Size | Description
|
||||
-----------------+--------------------+-------------------+----------------------+-------------+---------+-------------
|
||||
tableam_display | mat_view_heap_psql | materialized view | regress_display_role | permanent | 0 bytes |
|
||||
tableam_display | tbl_heap | table | regress_display_role | permanent | 0 bytes |
|
||||
tableam_display | tbl_heap_psql | table | regress_display_role | permanent | 0 bytes |
|
||||
tableam_display | view_heap_psql | view | regress_display_role | permanent | 0 bytes |
|
||||
(4 rows)
|
||||
|
||||
RESET ROLE;
|
||||
RESET search_path;
|
||||
DROP SCHEMA tableam_display CASCADE;
|
||||
NOTICE: drop cascades to 4 other objects
|
||||
DETAIL: drop cascades to table tableam_display.tbl_heap_psql
|
||||
drop cascades to table tableam_display.tbl_heap
|
||||
drop cascades to view tableam_display.view_heap_psql
|
||||
drop cascades to materialized view tableam_display.mat_view_heap_psql
|
||||
DROP ACCESS METHOD heap_psql;
|
||||
DROP ROLE regress_display_role;
|
||||
-- test numericlocale (as best we can without control of psql's locale)
|
||||
\pset format aligned
|
||||
\pset expanded off
|
||||
|
@ -455,20 +455,38 @@ select 1 where false;
|
||||
\df exp
|
||||
\pset tuples_only false
|
||||
|
||||
-- check conditional tableam display
|
||||
-- check conditional am display
|
||||
\pset expanded off
|
||||
|
||||
-- Create a heap2 table am handler with heapam handler
|
||||
CREATE SCHEMA tableam_display;
|
||||
CREATE ROLE regress_display_role;
|
||||
ALTER SCHEMA tableam_display OWNER TO regress_display_role;
|
||||
SET search_path TO tableam_display;
|
||||
CREATE ACCESS METHOD heap_psql TYPE TABLE HANDLER heap_tableam_handler;
|
||||
SET ROLE TO regress_display_role;
|
||||
-- Use only relations with a physical size of zero.
|
||||
CREATE TABLE tbl_heap_psql(f1 int, f2 char(100)) using heap_psql;
|
||||
CREATE TABLE tbl_heap(f1 int, f2 char(100)) using heap;
|
||||
CREATE VIEW view_heap_psql AS SELECT f1 from tbl_heap_psql;
|
||||
CREATE MATERIALIZED VIEW mat_view_heap_psql USING heap_psql AS SELECT f1 from tbl_heap_psql;
|
||||
\d+ tbl_heap_psql
|
||||
\d+ tbl_heap
|
||||
\set HIDE_TABLEAM off
|
||||
\d+ tbl_heap_psql
|
||||
\d+ tbl_heap
|
||||
-- AM is displayed for tables, indexes and materialized views.
|
||||
\d+
|
||||
\dt+
|
||||
\dm+
|
||||
-- But not for views and sequences.
|
||||
\dv+
|
||||
\set HIDE_TABLEAM on
|
||||
DROP TABLE tbl_heap, tbl_heap_psql;
|
||||
\d+
|
||||
RESET ROLE;
|
||||
RESET search_path;
|
||||
DROP SCHEMA tableam_display CASCADE;
|
||||
DROP ACCESS METHOD heap_psql;
|
||||
DROP ROLE regress_display_role;
|
||||
|
||||
-- test numericlocale (as best we can without control of psql's locale)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user