mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	psql: conditionally display oids and replication identity
In psql \d+, display oids only when they exist, and display replication identity only when it is non-default. Also document the defaults for replication identity for system and non-system tables. Update regression output.
This commit is contained in:
		@@ -608,12 +608,14 @@ ALTER TABLE [ IF EXISTS ] <replaceable class="PARAMETER">name</replaceable>
 | 
			
		||||
     <para>
 | 
			
		||||
      This form changes the information which is written to the write-ahead log
 | 
			
		||||
      to identify rows which are updated or deleted.  This option has no effect
 | 
			
		||||
      except when logical replication is in use.  <literal>DEFAULT</> records the 
 | 
			
		||||
      except when logical replication is in use.  <literal>DEFAULT</>
 | 
			
		||||
      (the default for non-system tables) records the 
 | 
			
		||||
      old values of the columns of the primary key, if any.  <literal>USING INDEX</>
 | 
			
		||||
      records the old values of the columns covered by the named index, which
 | 
			
		||||
      must be unique, not partial, not deferrable, and include only columns marked
 | 
			
		||||
      <literal>NOT NULL</>.  <literal>FULL</> records the old values of all columns
 | 
			
		||||
      in the row.  <literal>NOTHING</> records no information about the old row.
 | 
			
		||||
      (This is the default for system tables.)
 | 
			
		||||
      In all cases, no old values are logged unless at least one of the columns
 | 
			
		||||
      that would be logged differs between the old and new versions of the row.
 | 
			
		||||
     </para>
 | 
			
		||||
 
 | 
			
		||||
@@ -951,7 +951,9 @@ testdb=>
 | 
			
		||||
        The command form <literal>\d+</literal> is identical, except that
 | 
			
		||||
        more information is displayed: any comments associated with the
 | 
			
		||||
        columns of the table are shown, as is the presence of OIDs in the
 | 
			
		||||
        table, the view definition if the relation is a view.
 | 
			
		||||
        table, the view definition if the relation is a view, a non-default 
 | 
			
		||||
        <link linkend="SQL-CREATETABLE-REPLICA-IDENTITY">replica
 | 
			
		||||
        identity</link> setting.
 | 
			
		||||
        </para>
 | 
			
		||||
 | 
			
		||||
        <para>
 | 
			
		||||
 
 | 
			
		||||
@@ -2345,13 +2345,14 @@ describeOneTableDetails(const char *schemaname,
 | 
			
		||||
			printTableAddFooter(&cont, buf.data);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ((tableinfo.relkind == 'r' || tableinfo.relkind == 'm') &&
 | 
			
		||||
		if (verbose && (tableinfo.relkind == 'r' || tableinfo.relkind == 'm') &&
 | 
			
		||||
			/*
 | 
			
		||||
			 * No need to display default values;  we already display a
 | 
			
		||||
			 * REPLICA IDENTITY marker on indexes.
 | 
			
		||||
			 */
 | 
			
		||||
			tableinfo.relreplident != 'd' && tableinfo.relreplident != 'i' &&
 | 
			
		||||
			strcmp(schemaname, "pg_catalog") != 0)
 | 
			
		||||
			tableinfo.relreplident != 'i' &&
 | 
			
		||||
			((strcmp(schemaname, "pg_catalog") != 0 && tableinfo.relreplident != 'd') ||
 | 
			
		||||
			 (strcmp(schemaname, "pg_catalog") == 0 && tableinfo.relreplident != 'n')))
 | 
			
		||||
		{
 | 
			
		||||
			const char *s = _("Replica Identity");
 | 
			
		||||
 | 
			
		||||
@@ -2365,14 +2366,8 @@ describeOneTableDetails(const char *schemaname,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* OIDs, if verbose and not a materialized view */
 | 
			
		||||
		if (verbose && tableinfo.relkind != 'm')
 | 
			
		||||
		{
 | 
			
		||||
			const char *s = _("Has OIDs");
 | 
			
		||||
 | 
			
		||||
			printfPQExpBuffer(&buf, "%s: %s", s,
 | 
			
		||||
							  (tableinfo.hasoids ? _("yes") : _("no")));
 | 
			
		||||
			printTableAddFooter(&cont, buf.data);
 | 
			
		||||
		}
 | 
			
		||||
		if (verbose && tableinfo.relkind != 'm' && tableinfo.hasoids)
 | 
			
		||||
			printTableAddFooter(&cont, _("Has OIDs: yes"));
 | 
			
		||||
 | 
			
		||||
		/* Tablespace info */
 | 
			
		||||
		add_tablespace_footer(&cont, tableinfo.relkind, tableinfo.tablespace,
 | 
			
		||||
 
 | 
			
		||||
@@ -115,7 +115,6 @@ CREATE TABLE ctlt12_storage (LIKE ctlt1 INCLUDING STORAGE, LIKE ctlt2 INCLUDING
 | 
			
		||||
 a      | text | not null  | main     |              | 
 | 
			
		||||
 b      | text |           | extended |              | 
 | 
			
		||||
 c      | text |           | external |              | 
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
CREATE TABLE ctlt12_comments (LIKE ctlt1 INCLUDING COMMENTS, LIKE ctlt2 INCLUDING COMMENTS);
 | 
			
		||||
\d+ ctlt12_comments
 | 
			
		||||
@@ -125,7 +124,6 @@ CREATE TABLE ctlt12_comments (LIKE ctlt1 INCLUDING COMMENTS, LIKE ctlt2 INCLUDIN
 | 
			
		||||
 a      | text | not null  | extended |              | A
 | 
			
		||||
 b      | text |           | extended |              | B
 | 
			
		||||
 c      | text |           | extended |              | C
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
CREATE TABLE ctlt1_inh (LIKE ctlt1 INCLUDING CONSTRAINTS INCLUDING COMMENTS) INHERITS (ctlt1);
 | 
			
		||||
NOTICE:  merging column "a" with inherited definition
 | 
			
		||||
@@ -140,7 +138,6 @@ NOTICE:  merging constraint "ctlt1_a_check" with inherited definition
 | 
			
		||||
Check constraints:
 | 
			
		||||
    "ctlt1_a_check" CHECK (length(a) > 2)
 | 
			
		||||
Inherits: ctlt1
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
SELECT description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'ctlt1_inh'::regclass;
 | 
			
		||||
 description 
 | 
			
		||||
@@ -162,7 +159,6 @@ Check constraints:
 | 
			
		||||
    "ctlt3_a_check" CHECK (length(a) < 5)
 | 
			
		||||
Inherits: ctlt1,
 | 
			
		||||
          ctlt3
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
CREATE TABLE ctlt13_like (LIKE ctlt3 INCLUDING CONSTRAINTS INCLUDING COMMENTS INCLUDING STORAGE) INHERITS (ctlt1);
 | 
			
		||||
NOTICE:  merging column "a" with inherited definition
 | 
			
		||||
@@ -177,7 +173,6 @@ Check constraints:
 | 
			
		||||
    "ctlt1_a_check" CHECK (length(a) > 2)
 | 
			
		||||
    "ctlt3_a_check" CHECK (length(a) < 5)
 | 
			
		||||
Inherits: ctlt1
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
SELECT description FROM pg_description, pg_constraint c WHERE classoid = 'pg_constraint'::regclass AND objoid = c.oid AND c.conrelid = 'ctlt13_like'::regclass;
 | 
			
		||||
 description 
 | 
			
		||||
@@ -198,7 +193,6 @@ Indexes:
 | 
			
		||||
    "ctlt_all_expr_idx" btree ((a || b))
 | 
			
		||||
Check constraints:
 | 
			
		||||
    "ctlt1_a_check" CHECK (length(a) > 2)
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
SELECT c.relname, objsubid, description FROM pg_description, pg_index i, pg_class c WHERE classoid = 'pg_class'::regclass AND objoid = i.indexrelid AND c.oid = i.indexrelid AND i.indrelid = 'ctlt_all'::regclass ORDER BY c.relname, objsubid;
 | 
			
		||||
    relname     | objsubid | description 
 | 
			
		||||
 
 | 
			
		||||
@@ -684,7 +684,6 @@ COMMENT ON COLUMN ft1.c1 IS 'ft1.c1';
 | 
			
		||||
 c3     | date    |           |                                | plain    |              | 
 | 
			
		||||
Server: s0
 | 
			
		||||
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
\det+
 | 
			
		||||
                                 List of foreign tables
 | 
			
		||||
@@ -743,7 +742,6 @@ ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 SET STATISTICS -1;
 | 
			
		||||
 c10    | integer |           | (p1 'v1')                      | plain    |              | 
 | 
			
		||||
Server: s0
 | 
			
		||||
FDW Options: (delimiter ',', quote '"', "be quoted" 'value')
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
-- can't change the column type if it's used elsewhere
 | 
			
		||||
CREATE TABLE use_ft1_column_type (x ft1);
 | 
			
		||||
 
 | 
			
		||||
@@ -913,7 +913,6 @@ ALTER TABLE inhts RENAME d TO dd;
 | 
			
		||||
 dd     | integer |           | plain   |              | 
 | 
			
		||||
Inherits: inht1,
 | 
			
		||||
          inhs1
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
DROP TABLE inhts;
 | 
			
		||||
-- Test for renaming in diamond inheritance
 | 
			
		||||
@@ -934,7 +933,6 @@ ALTER TABLE inht1 RENAME aa TO aaa;
 | 
			
		||||
 z      | integer |           | plain   |              | 
 | 
			
		||||
Inherits: inht2,
 | 
			
		||||
          inht3
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
CREATE TABLE inhts (d int) INHERITS (inht2, inhs1);
 | 
			
		||||
NOTICE:  merging multiple inherited definitions of column "b"
 | 
			
		||||
@@ -952,7 +950,6 @@ ERROR:  cannot rename inherited column "b"
 | 
			
		||||
 d      | integer |           | plain   |              | 
 | 
			
		||||
Inherits: inht2,
 | 
			
		||||
          inhs1
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
WITH RECURSIVE r AS (
 | 
			
		||||
  SELECT 'inht1'::regclass AS inhrelid
 | 
			
		||||
@@ -999,7 +996,6 @@ CREATE TABLE test_constraints_inh () INHERITS (test_constraints);
 | 
			
		||||
Indexes:
 | 
			
		||||
    "test_constraints_val1_val2_key" UNIQUE CONSTRAINT, btree (val1, val2)
 | 
			
		||||
Child tables: test_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
ALTER TABLE ONLY test_constraints DROP CONSTRAINT test_constraints_val1_val2_key;
 | 
			
		||||
\d+ test_constraints
 | 
			
		||||
@@ -1010,7 +1006,6 @@ ALTER TABLE ONLY test_constraints DROP CONSTRAINT test_constraints_val1_val2_key
 | 
			
		||||
 val1   | character varying |           | extended |              | 
 | 
			
		||||
 val2   | integer           |           | plain    |              | 
 | 
			
		||||
Child tables: test_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
\d+ test_constraints_inh
 | 
			
		||||
                      Table "public.test_constraints_inh"
 | 
			
		||||
@@ -1020,7 +1015,6 @@ Has OIDs: no
 | 
			
		||||
 val1   | character varying |           | extended |              | 
 | 
			
		||||
 val2   | integer           |           | plain    |              | 
 | 
			
		||||
Inherits: test_constraints
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
DROP TABLE test_constraints_inh;
 | 
			
		||||
DROP TABLE test_constraints;
 | 
			
		||||
@@ -1037,7 +1031,6 @@ CREATE TABLE test_ex_constraints_inh () INHERITS (test_ex_constraints);
 | 
			
		||||
Indexes:
 | 
			
		||||
    "test_ex_constraints_c_excl" EXCLUDE USING gist (c WITH &&)
 | 
			
		||||
Child tables: test_ex_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
ALTER TABLE test_ex_constraints DROP CONSTRAINT test_ex_constraints_c_excl;
 | 
			
		||||
\d+ test_ex_constraints
 | 
			
		||||
@@ -1046,7 +1039,6 @@ ALTER TABLE test_ex_constraints DROP CONSTRAINT test_ex_constraints_c_excl;
 | 
			
		||||
--------+--------+-----------+---------+--------------+-------------
 | 
			
		||||
 c      | circle |           | plain   |              | 
 | 
			
		||||
Child tables: test_ex_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
\d+ test_ex_constraints_inh
 | 
			
		||||
               Table "public.test_ex_constraints_inh"
 | 
			
		||||
@@ -1054,7 +1046,6 @@ Has OIDs: no
 | 
			
		||||
--------+--------+-----------+---------+--------------+-------------
 | 
			
		||||
 c      | circle |           | plain   |              | 
 | 
			
		||||
Inherits: test_ex_constraints
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
DROP TABLE test_ex_constraints_inh;
 | 
			
		||||
DROP TABLE test_ex_constraints;
 | 
			
		||||
@@ -1071,7 +1062,6 @@ Indexes:
 | 
			
		||||
    "test_primary_constraints_pkey" PRIMARY KEY, btree (id)
 | 
			
		||||
Referenced by:
 | 
			
		||||
    TABLE "test_foreign_constraints" CONSTRAINT "test_foreign_constraints_id1_fkey" FOREIGN KEY (id1) REFERENCES test_primary_constraints(id)
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
\d+ test_foreign_constraints
 | 
			
		||||
               Table "public.test_foreign_constraints"
 | 
			
		||||
@@ -1081,7 +1071,6 @@ Has OIDs: no
 | 
			
		||||
Foreign-key constraints:
 | 
			
		||||
    "test_foreign_constraints_id1_fkey" FOREIGN KEY (id1) REFERENCES test_primary_constraints(id)
 | 
			
		||||
Child tables: test_foreign_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
ALTER TABLE test_foreign_constraints DROP CONSTRAINT test_foreign_constraints_id1_fkey;
 | 
			
		||||
\d+ test_foreign_constraints
 | 
			
		||||
@@ -1090,7 +1079,6 @@ ALTER TABLE test_foreign_constraints DROP CONSTRAINT test_foreign_constraints_id
 | 
			
		||||
--------+---------+-----------+---------+--------------+-------------
 | 
			
		||||
 id1    | integer |           | plain   |              | 
 | 
			
		||||
Child tables: test_foreign_constraints_inh
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
\d+ test_foreign_constraints_inh
 | 
			
		||||
             Table "public.test_foreign_constraints_inh"
 | 
			
		||||
@@ -1098,7 +1086,6 @@ Has OIDs: no
 | 
			
		||||
--------+---------+-----------+---------+--------------+-------------
 | 
			
		||||
 id1    | integer |           | plain   |              | 
 | 
			
		||||
Inherits: test_foreign_constraints
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
DROP TABLE test_foreign_constraints_inh;
 | 
			
		||||
DROP TABLE test_foreign_constraints;
 | 
			
		||||
 
 | 
			
		||||
@@ -152,14 +152,14 @@ SELECT relreplident FROM pg_class WHERE oid = 'test_replica_identity'::regclass;
 | 
			
		||||
 f
 | 
			
		||||
(1 row)
 | 
			
		||||
 | 
			
		||||
\d test_replica_identity
 | 
			
		||||
                         Table "public.test_replica_identity"
 | 
			
		||||
 Column |  Type   |                             Modifiers                              
 | 
			
		||||
--------+---------+--------------------------------------------------------------------
 | 
			
		||||
 id     | integer | not null default nextval('test_replica_identity_id_seq'::regclass)
 | 
			
		||||
 keya   | text    | not null
 | 
			
		||||
 keyb   | text    | not null
 | 
			
		||||
 nonkey | text    | 
 | 
			
		||||
\d+ test_replica_identity
 | 
			
		||||
                                             Table "public.test_replica_identity"
 | 
			
		||||
 Column |  Type   |                             Modifiers                              | Storage  | Stats target | Description 
 | 
			
		||||
--------+---------+--------------------------------------------------------------------+----------+--------------+-------------
 | 
			
		||||
 id     | integer | not null default nextval('test_replica_identity_id_seq'::regclass) | plain    |              | 
 | 
			
		||||
 keya   | text    | not null                                                           | extended |              | 
 | 
			
		||||
 keyb   | text    | not null                                                           | extended |              | 
 | 
			
		||||
 nonkey | text    |                                                                    | extended |              | 
 | 
			
		||||
Indexes:
 | 
			
		||||
    "test_replica_identity_pkey" PRIMARY KEY, btree (id)
 | 
			
		||||
    "test_replica_identity_expr" UNIQUE, btree (keya, keyb, (3))
 | 
			
		||||
 
 | 
			
		||||
@@ -2609,7 +2609,6 @@ Rules:
 | 
			
		||||
    r3 AS
 | 
			
		||||
    ON DELETE TO rules_src DO
 | 
			
		||||
 NOTIFY rules_src_deletion
 | 
			
		||||
Has OIDs: no
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
-- check alter rename rule
 | 
			
		||||
 
 | 
			
		||||
@@ -71,7 +71,7 @@ SELECT count(*) FROM pg_index WHERE indrelid = 'test_replica_identity'::regclass
 | 
			
		||||
 | 
			
		||||
ALTER TABLE test_replica_identity REPLICA IDENTITY FULL;
 | 
			
		||||
SELECT relreplident FROM pg_class WHERE oid = 'test_replica_identity'::regclass;
 | 
			
		||||
\d test_replica_identity
 | 
			
		||||
\d+ test_replica_identity
 | 
			
		||||
ALTER TABLE test_replica_identity REPLICA IDENTITY NOTHING;
 | 
			
		||||
SELECT relreplident FROM pg_class WHERE oid = 'test_replica_identity'::regclass;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user