]> granicus.if.org Git - postgresql/commitdiff
psql: Describe partitioned tables/indexes as such
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Nov 2018 19:54:26 +0000 (16:54 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Mon, 19 Nov 2018 20:30:06 +0000 (17:30 -0300)
In \d and \z, instead of conflating partitioned tables and indexes with
plain ones, set the "type" column and table title differently to make
the distinction obvious.  A simple ease-of-use improvement.

Author: Pavel Stehule, Michaël Paquier, Álvaro Herrera
Reviewed-by: Amit Langote
Discussion: https://postgr.es/m/CAFj8pRDMWPgijpt_vPj1t702PgLG4Ls2NCf+rEcb+qGPpossmg@mail.gmail.com

src/bin/psql/describe.c
src/test/regress/expected/create_table.out
src/test/regress/expected/foreign_data.out
src/test/regress/expected/foreign_key.out
src/test/regress/expected/indexing.out
src/test/regress/expected/insert.out
src/test/regress/expected/rowsecurity.out

index 4ca0db1d0ca423042cbb60b9256166108b546714..bd7a97bd6f4b05569a5508fc133e010d6b375732 100644 (file)
@@ -955,7 +955,7 @@ permissionsList(const char *pattern)
                                          gettext_noop("materialized view"),
                                          gettext_noop("sequence"),
                                          gettext_noop("foreign table"),
-                                         gettext_noop("table"),        /* partitioned table */
+                                         gettext_noop("partitioned table"),
                                          gettext_noop("Type"));
 
        printACLColumn(&buf, "c.relacl");
@@ -1896,7 +1896,6 @@ describeOneTableDetails(const char *schemaname,
                                                                  schemaname, relationname);
                        break;
                case RELKIND_INDEX:
-               case RELKIND_PARTITIONED_INDEX:
                        if (tableinfo.relpersistence == 'u')
                                printfPQExpBuffer(&title, _("Unlogged index \"%s.%s\""),
                                                                  schemaname, relationname);
@@ -1904,6 +1903,14 @@ describeOneTableDetails(const char *schemaname,
                                printfPQExpBuffer(&title, _("Index \"%s.%s\""),
                                                                  schemaname, relationname);
                        break;
+               case RELKIND_PARTITIONED_INDEX:
+                       if (tableinfo.relpersistence == 'u')
+                               printfPQExpBuffer(&title, _("Unlogged partitioned index \"%s.%s\""),
+                                                                 schemaname, relationname);
+                       else
+                               printfPQExpBuffer(&title, _("Partitioned index \"%s.%s\""),
+                                                                 schemaname, relationname);
+                       break;
                case 's':
                        /* not used as of 8.2, but keep it for backwards compatibility */
                        printfPQExpBuffer(&title, _("Special relation \"%s.%s\""),
@@ -1923,10 +1930,10 @@ describeOneTableDetails(const char *schemaname,
                        break;
                case RELKIND_PARTITIONED_TABLE:
                        if (tableinfo.relpersistence == 'u')
-                               printfPQExpBuffer(&title, _("Unlogged table \"%s.%s\""),
+                               printfPQExpBuffer(&title, _("Unlogged partitioned table \"%s.%s\""),
                                                                  schemaname, relationname);
                        else
-                               printfPQExpBuffer(&title, _("Table \"%s.%s\""),
+                               printfPQExpBuffer(&title, _("Partitioned table \"%s.%s\""),
                                                                  schemaname, relationname);
                        break;
                default:
@@ -3524,8 +3531,8 @@ listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys
                                          gettext_noop("sequence"),
                                          gettext_noop("special"),
                                          gettext_noop("foreign table"),
-                                         gettext_noop("table"),        /* partitioned table */
-                                         gettext_noop("index"),        /* partitioned index */
+                                         gettext_noop("partitioned table"),
+                                         gettext_noop("partitioned index"),
                                          gettext_noop("Type"),
                                          gettext_noop("Owner"));
 
index 7b184330ed501381d01900b1609100bf97f2a5fd..f474f0d73e1f06a6a4113818355a0b533e073c9c 100644 (file)
@@ -403,7 +403,7 @@ CREATE TABLE fail () INHERITS (partitioned2);
 ERROR:  cannot inherit from partitioned table "partitioned2"
 -- Partition key in describe output
 \d partitioned
-            Table "public.partitioned"
+      Partitioned table "public.partitioned"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -414,7 +414,7 @@ Partition key: RANGE (a oid_ops, plusone(b), c, d COLLATE "C")
 Number of partitions: 0
 
 \d+ partitioned2
-                                Table "public.partitioned2"
+                          Partitioned table "public.partitioned2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  a      | integer |           |          |         | plain    |              | 
@@ -769,7 +769,7 @@ Check constraints:
 
 -- Both partition bound and partition key in describe output
 \d+ part_c
-                                   Table "public.part_c"
+                             Partitioned table "public.part_c"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  a      | text    |           |          |         | extended |              | 
@@ -798,7 +798,7 @@ Check constraints:
 -- output could vary depending on the order in which partition oids are
 -- returned.
 \d parted
-               Table "public.parted"
+         Partitioned table "public.parted"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | text    |           |          | 
@@ -809,7 +809,7 @@ Check constraints:
 Number of partitions: 3 (Use \d+ to list them.)
 
 \d hash_parted
-            Table "public.hash_parted"
+      Partitioned table "public.hash_parted"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -891,7 +891,7 @@ SELECT obj_description('parted_col_comment'::regclass);
 (1 row)
 
 \d+ parted_col_comment
-                              Table "public.parted_col_comment"
+                        Partitioned table "public.parted_col_comment"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target |  Description  
 --------+---------+-----------+----------+---------+----------+--------------+---------------
  a      | integer |           |          |         | plain    |              | Partition key
@@ -917,7 +917,7 @@ create table boolspart (a bool) partition by list (a);
 create table boolspart_t partition of boolspart for values in (true);
 create table boolspart_f partition of boolspart for values in (false);
 \d+ boolspart
-                                 Table "public.boolspart"
+                           Partitioned table "public.boolspart"
  Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
 --------+---------+-----------+----------+---------+---------+--------------+-------------
  a      | boolean |           |          |         | plain   |              | 
index 75365501d4a4f64393ff279ac416d80033b9e3c4..b16c8e2c247e3d3f3e866612ff199242d19150b2 100644 (file)
@@ -1853,7 +1853,7 @@ CREATE TABLE fd_pt2 (
 CREATE FOREIGN TABLE fd_pt2_1 PARTITION OF fd_pt2 FOR VALUES IN (1)
   SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value');
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
@@ -1898,7 +1898,7 @@ ERROR:  table "fd_pt2_1" contains column "c4" not found in parent "fd_pt2"
 DETAIL:  The new partition may contain only the columns present in parent.
 DROP FOREIGN TABLE fd_pt2_1;
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
@@ -1925,7 +1925,7 @@ FDW options: (delimiter ',', quote '"', "be quoted" 'value')
 -- no attach partition validation occurs for foreign tables
 ALTER TABLE fd_pt2 ATTACH PARTITION fd_pt2_1 FOR VALUES IN (1);
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
@@ -1953,7 +1953,7 @@ ERROR:  cannot add column to a partition
 ALTER TABLE fd_pt2_1 ALTER c3 SET NOT NULL;
 ALTER TABLE fd_pt2_1 ADD CONSTRAINT p21chk CHECK (c2 <> '');
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
@@ -1983,7 +1983,7 @@ ERROR:  column "c1" is marked NOT NULL in parent table
 ALTER TABLE fd_pt2 DETACH PARTITION fd_pt2_1;
 ALTER TABLE fd_pt2 ALTER c2 SET NOT NULL;
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
@@ -2011,7 +2011,7 @@ ALTER TABLE fd_pt2 ATTACH PARTITION fd_pt2_1 FOR VALUES IN (1);
 ALTER TABLE fd_pt2 DETACH PARTITION fd_pt2_1;
 ALTER TABLE fd_pt2 ADD CONSTRAINT fd_pt2chk1 CHECK (c1 > 0);
 \d+ fd_pt2
-                                   Table "public.fd_pt2"
+                             Partitioned table "public.fd_pt2"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  c1     | integer |           | not null |         | plain    |              | 
index fee594531d614f323c1f4cfe6a8b68773ff2904b..085c9aba1150c0f7f31d2f7f38911bc1b32c1565 100644 (file)
@@ -1692,7 +1692,7 @@ ALTER TABLE fk_partitioned_fk DETACH PARTITION fk_partitioned_fk_4;
 ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_4 FOR VALUES IN (3500,3502);
 -- should only have one constraint
 \d fk_partitioned_fk_4
-        Table "public.fk_partitioned_fk_4"
+  Partitioned table "public.fk_partitioned_fk_4"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -1737,7 +1737,7 @@ ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_5 FOR VALUES IN
 -- this one has two constraints, similar but not quite the one in the parent,
 -- so it gets a new one
 \d fk_partitioned_fk_5
-        Table "public.fk_partitioned_fk_5"
+  Partitioned table "public.fk_partitioned_fk_5"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
index ca27346f182ffcc8ade8c3f19ee6cf221b4d81bd..3e61f50e7ce3ec4582c405ba447521302649ba0d 100644 (file)
@@ -260,7 +260,7 @@ Indexes:
     "idxpart1_a_idx" btree (a)
 
 \d idxpart2
-              Table "public.idxpart2"
+        Partitioned table "public.idxpart2"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -305,7 +305,7 @@ where indexrelid::regclass::text like 'idxpart%'
 -- attaching idxpart22 is not enough to set idxpart22_a_idx valid ...
 alter index idxpart2_a_idx attach partition idxpart22_a_idx;
 \d idxpart2
-              Table "public.idxpart2"
+        Partitioned table "public.idxpart2"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -319,7 +319,7 @@ Number of partitions: 2 (Use \d+ to list them.)
 create index on idxpart21 (a);
 alter index idxpart2_a_idx attach partition idxpart21_a_idx;
 \d idxpart2
-              Table "public.idxpart2"
+        Partitioned table "public.idxpart2"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
@@ -728,7 +728,7 @@ create table idxpart (col_keep int) partition by range (col_keep);
 create index on idxpart (col_keep);
 alter table idxpart attach partition idxpart1 for values from (0) to (1000);
 \d idxpart
-               Table "public.idxpart"
+         Partitioned table "public.idxpart"
   Column  |  Type   | Collation | Nullable | Default 
 ----------+---------+-----------+----------+---------
  col_keep | integer |           |          | 
@@ -771,7 +771,7 @@ create index on idxpart1 (col_keep);
 create index on idxpart (col_keep);
 alter table idxpart attach partition idxpart1 for values from (0) to (1000);
 \d idxpart
-               Table "public.idxpart"
+         Partitioned table "public.idxpart"
   Column  |  Type   | Collation | Nullable | Default 
 ----------+---------+-----------+----------+---------
  col_keep | integer |           |          | 
@@ -810,7 +810,7 @@ drop table idxpart;
 -- Verify that it works to add primary key / unique to partitioned tables
 create table idxpart (a int primary key, b int) partition by range (a);
 \d idxpart
-              Table "public.idxpart"
+        Partitioned table "public.idxpart"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           | not null | 
@@ -872,7 +872,7 @@ ERROR:  insufficient columns in PRIMARY KEY constraint definition
 DETAIL:  PRIMARY KEY constraint on table "idxpart" lacks column "b" which is part of the partition key.
 alter table idxpart add primary key (a, b);    -- this works
 \d idxpart
-              Table "public.idxpart"
+        Partitioned table "public.idxpart"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           | not null | 
@@ -903,7 +903,7 @@ ERROR:  insufficient columns in UNIQUE constraint definition
 DETAIL:  UNIQUE constraint on table "idxpart" lacks column "b" which is part of the partition key.
 alter table idxpart add unique (b, a);         -- this works
 \d idxpart
-              Table "public.idxpart"
+        Partitioned table "public.idxpart"
  Column |  Type   | Collation | Nullable | Default 
 --------+---------+-----------+----------+---------
  a      | integer |           |          | 
index 5edf2693679921a59bbadae83bf9a6fc7c5835bb..1cf6531c0192484047e636b8a79b4458a293380a 100644 (file)
@@ -448,7 +448,7 @@ from hash_parted order by part;
 -- test \d+ output on a table which has both partitioned and unpartitioned
 -- partitions
 \d+ list_parted
-                                Table "public.list_parted"
+                          Partitioned table "public.list_parted"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  a      | text    |           |          |         | extended |              | 
@@ -799,7 +799,7 @@ create table mcrparted6_common_ge_10 partition of mcrparted for values from ('co
 create table mcrparted7_gt_common_lt_d partition of mcrparted for values from ('common', maxvalue) to ('d', minvalue);
 create table mcrparted8_ge_d partition of mcrparted for values from ('d', minvalue) to (maxvalue, maxvalue);
 \d+ mcrparted
-                                 Table "public.mcrparted"
+                           Partitioned table "public.mcrparted"
  Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 --------+---------+-----------+----------+---------+----------+--------------+-------------
  a      | text    |           |          |         | extended |              | 
index bc16ca4c43f2e6cb9424c72293058b2dfb211a1b..6f77f5c8a46104f1ad718270801860673a8c5694 100644 (file)
@@ -938,7 +938,7 @@ CREATE POLICY pp1 ON part_document AS PERMISSIVE
 CREATE POLICY pp1r ON part_document AS RESTRICTIVE TO regress_rls_dave
     USING (cid < 55);
 \d+ part_document
-                          Table "regress_rls_schema.part_document"
+                    Partitioned table "regress_rls_schema.part_document"
  Column  |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
 ---------+---------+-----------+----------+---------+----------+--------------+-------------
  did     | integer |           |          |         | plain    |              |