public inbox for [email protected]  
help / color / mirror / Atom feed
From: Lakshmi N <[email protected]>
To: David G. Johnston <[email protected]>
Cc: [email protected] <[email protected]>
Cc: [email protected] <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Show VIRTUAL keyword for virtual generated columns in pg_dump and psql
Date: Mon, 13 Apr 2026 13:49:12 -0700
Message-ID: <CA+3i_M8j0WqTF3_BEWkAdJk=5DjaQQhefP-yVZ1O15F_qT52kg@mail.gmail.com> (raw)
In-Reply-To: <CAKFQuwan3J1WdqtiXr4u9Lmj+5Z7r+hYOKfy_A1g23_8f90LWw@mail.gmail.com>
References: <CA+3i_M8Rj0yEA5rRbWjobNbcZsB0MExfZbKV-mkWwFeyRvanCw@mail.gmail.com>
	<CAKFQuwan3J1WdqtiXr4u9Lmj+5Z7r+hYOKfy_A1g23_8f90LWw@mail.gmail.com>

Hi,

On Mon, Apr 13, 2026 at 5:27 AM David G. Johnston <
[email protected]> wrote:

> On Monday, April 13, 2026, Lakshmi N <[email protected]> wrote:
>>
>> pg_dump and psql's \d currently display stored and virtual generated
>> columns asymmetrically:
>>
>
>>
>>     s_total integer GENERATED ALWAYS AS ((a + b)) STORED
>>     v_total integer GENERATED ALWAYS AS ((a + b))
>>
>> Since VIRTUAL is default most likely this was omitted but with this
>>
> puts the burden on the reader to identify whether it is STORED or
>> VIRTUAL since both kinds coexist in v19.
>>
>
> The output follows existing conventions of not printing extraneous text.
> Additionally, storage itself is non-standard so the absence of a modifier
> is producing standard-compliant output.  I would -1 changing pg_dump on
> this basis.  I’d be inclined to go with the symmetry/readability argument
> for psql \d though.
>

Thank you for the feedback! Updated the patch for psql \d only.

 Regards,
Lakshmi


Attachments:

  [application/octet-stream] 0001-Fix-psql-d-to-show-VIRTUAL-keyword-for-generated-col.patch (28.5K, 3-0001-Fix-psql-d-to-show-VIRTUAL-keyword-for-generated-col.patch)
  download | inline diff:
From d0606c8db8b4310c0ba2ebc5b1c71600ff12baad Mon Sep 17 00:00:00 2001
From: Lakshmi N <[email protected]>
Date: Mon, 13 Apr 2026 13:43:36 -0700
Subject: [PATCH] Fix psql \d to show VIRTUAL keyword for generated columns

---
 src/bin/psql/describe.c                       |   2 +-
 .../regress/expected/create_table_like.out    |  12 +-
 .../regress/expected/generated_virtual.out    | 240 +++++++++---------
 3 files changed, 127 insertions(+), 127 deletions(-)

diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index dd1179ef927..ef8a3809b11 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -2264,7 +2264,7 @@ describeOneTableDetails(const char *schemaname,
 			}
 			else if (generated[0] == ATTRIBUTE_GENERATED_VIRTUAL)
 			{
-				default_str = psprintf("generated always as (%s)",
+				default_str = psprintf("generated always as (%s) virtual",
 									   PQgetvalue(res, i, attrdef_col));
 				mustfree = true;
 			}
diff --git a/src/test/regress/expected/create_table_like.out b/src/test/regress/expected/create_table_like.out
index 5720d160f05..67ac2609426 100644
--- a/src/test/regress/expected/create_table_like.out
+++ b/src/test/regress/expected/create_table_like.out
@@ -116,11 +116,11 @@ DROP TABLE test_like_id_1, test_like_id_2, test_like_id_3;
 CREATE TABLE test_like_gen_1 (a int, b int GENERATED ALWAYS AS (a * 2) STORED, c int GENERATED ALWAYS AS (a * 3) VIRTUAL);
 \d test_like_gen_1
                         Table "public.test_like_gen_1"
- Column |  Type   | Collation | Nullable |              Default               
---------+---------+-----------+----------+------------------------------------
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
  b      | integer |           |          | generated always as (a * 2) stored
- c      | integer |           |          | generated always as (a * 3)
+ c      | integer |           |          | generated always as (a * 3) virtual
 
 INSERT INTO test_like_gen_1 (a) VALUES (1);
 SELECT * FROM test_like_gen_1;
@@ -148,11 +148,11 @@ SELECT * FROM test_like_gen_2;
 CREATE TABLE test_like_gen_3 (LIKE test_like_gen_1 INCLUDING GENERATED);
 \d test_like_gen_3
                         Table "public.test_like_gen_3"
- Column |  Type   | Collation | Nullable |              Default               
---------+---------+-----------+----------+------------------------------------
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
  b      | integer |           |          | generated always as (a * 2) stored
- c      | integer |           |          | generated always as (a * 3)
+ c      | integer |           |          | generated always as (a * 3) virtual
 
 INSERT INTO test_like_gen_3 (a) VALUES (1);
 SELECT * FROM test_like_gen_3;
diff --git a/src/test/regress/expected/generated_virtual.out b/src/test/regress/expected/generated_virtual.out
index 234061fa1f7..790dc99cb34 100644
--- a/src/test/regress/expected/generated_virtual.out
+++ b/src/test/regress/expected/generated_virtual.out
@@ -20,11 +20,11 @@ SELECT table_name, column_name, dependent_column FROM information_schema.column_
 (1 row)
 
 \d gtest1
-                Table "generated_virtual_tests.gtest1"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest1"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           | not null | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Indexes:
     "gtest1_pkey" PRIMARY KEY, btree (a)
 
@@ -313,11 +313,11 @@ SELECT * FROM gtest1_1;
 (0 rows)
 
 \d gtest1_1
-               Table "generated_virtual_tests.gtest1_1"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest1_1"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           | not null | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Inherits:
     gtest1
 
@@ -360,12 +360,12 @@ DETAIL:  Parent column is VIRTUAL, child column is STORED.
 CREATE TABLE gtestx (x int, b int GENERATED ALWAYS AS (a * 22) VIRTUAL) INHERITS (gtest1);  -- ok, overrides parent
 NOTICE:  merging column "b" with inherited definition
 \d+ gtestx
-                                    Table "generated_virtual_tests.gtestx"
- Column |  Type   | Collation | Nullable |           Default            | Storage | Stats target | Description 
---------+---------+-----------+----------+------------------------------+---------+--------------+-------------
- a      | integer |           | not null |                              | plain   |              | 
- b      | integer |           |          | generated always as (a * 22) | plain   |              | 
- x      | integer |           |          |                              | plain   |              | 
+                                        Table "generated_virtual_tests.gtestx"
+ Column |  Type   | Collation | Nullable |               Default                | Storage | Stats target | Description 
+--------+---------+-----------+----------+--------------------------------------+---------+--------------+-------------
+ a      | integer |           | not null |                                      | plain   |              | 
+ b      | integer |           |          | generated always as (a * 22) virtual | plain   |              | 
+ x      | integer |           |          |                                      | plain   |              | 
 Not-null constraints:
     "gtest1_a_not_null" NOT NULL "a" (inherited)
 Inherits:
@@ -414,11 +414,11 @@ NOTICE:  merging multiple inherited definitions of column "b"
 NOTICE:  moving and merging column "b" with inherited definition
 DETAIL:  User-specified column moved to the position of the inherited column.
 \d gtest1_y
-               Table "generated_virtual_tests.gtest1_y"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest1_y"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           | not null | 
- b      | integer |           |          | generated always as (x + 1)
+ b      | integer |           |          | generated always as (x + 1) virtual
  x      | integer |           |          | 
 Inherits:
     gtest1
@@ -655,11 +655,11 @@ SELECT pg_relation_filenode('gtest20') = :gtest20_filenode AS is_same_file;
 (1 row)
 
 \d gtest20
-                Table "generated_virtual_tests.gtest20"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest20"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           | not null | 
- b      | integer |           |          | generated always as (a * 4)
+ b      | integer |           |          | generated always as (a * 4) virtual
  c      | integer |           |          | 11
 Indexes:
     "gtest20_pkey" PRIMARY KEY, btree (a)
@@ -891,30 +891,30 @@ DROP TABLE gtest_child3;
 CREATE TABLE gtest_child3 (f1 date NOT NULL, f2 bigint, f3 bigint GENERATED ALWAYS AS (f2 * 33) VIRTUAL);
 ALTER TABLE gtest_parent ATTACH PARTITION gtest_child3 FOR VALUES FROM ('2016-09-01') TO ('2016-10-01');
 \d gtest_child
-              Table "generated_virtual_tests.gtest_child"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+                  Table "generated_virtual_tests.gtest_child"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 2)
+ f3     | bigint |           |          | generated always as (f2 * 2) virtual
 Partition of: gtest_parent FOR VALUES FROM ('07-01-2016') TO ('08-01-2016')
 
 \d gtest_child2
-              Table "generated_virtual_tests.gtest_child2"
- Column |  Type  | Collation | Nullable |            Default            
---------+--------+-----------+----------+-------------------------------
+                  Table "generated_virtual_tests.gtest_child2"
+ Column |  Type  | Collation | Nullable |                Default                
+--------+--------+-----------+----------+---------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 22)
+ f3     | bigint |           |          | generated always as (f2 * 22) virtual
 Partition of: gtest_parent FOR VALUES FROM ('08-01-2016') TO ('09-01-2016')
 
 \d gtest_child3
-              Table "generated_virtual_tests.gtest_child3"
- Column |  Type  | Collation | Nullable |            Default            
---------+--------+-----------+----------+-------------------------------
+                  Table "generated_virtual_tests.gtest_child3"
+ Column |  Type  | Collation | Nullable |                Default                
+--------+--------+-----------+----------+---------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 33)
+ f3     | bigint |           |          | generated always as (f2 * 33) virtual
 Partition of: gtest_parent FOR VALUES FROM ('09-01-2016') TO ('10-01-2016')
 
 INSERT INTO gtest_parent (f1, f2) VALUES ('2016-07-15', 1);
@@ -959,40 +959,40 @@ SELECT tableoid::regclass, * FROM gtest_parent ORDER BY 1, 2, 3;
 ALTER TABLE ONLY gtest_parent ALTER COLUMN f3 SET EXPRESSION AS (f2 * 4);
 ALTER TABLE gtest_child ALTER COLUMN f3 SET EXPRESSION AS (f2 * 10);
 \d gtest_parent
-       Partitioned table "generated_virtual_tests.gtest_parent"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+           Partitioned table "generated_virtual_tests.gtest_parent"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 4)
+ f3     | bigint |           |          | generated always as (f2 * 4) virtual
 Partition key: RANGE (f1)
 Number of partitions: 3 (Use \d+ to list them.)
 
 \d gtest_child
-              Table "generated_virtual_tests.gtest_child"
- Column |  Type  | Collation | Nullable |            Default            
---------+--------+-----------+----------+-------------------------------
+                  Table "generated_virtual_tests.gtest_child"
+ Column |  Type  | Collation | Nullable |                Default                
+--------+--------+-----------+----------+---------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 10)
+ f3     | bigint |           |          | generated always as (f2 * 10) virtual
 Partition of: gtest_parent FOR VALUES FROM ('07-01-2016') TO ('08-01-2016')
 
 \d gtest_child2
-              Table "generated_virtual_tests.gtest_child2"
- Column |  Type  | Collation | Nullable |            Default            
---------+--------+-----------+----------+-------------------------------
+                  Table "generated_virtual_tests.gtest_child2"
+ Column |  Type  | Collation | Nullable |                Default                
+--------+--------+-----------+----------+---------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 22)
+ f3     | bigint |           |          | generated always as (f2 * 22) virtual
 Partition of: gtest_parent FOR VALUES FROM ('08-01-2016') TO ('09-01-2016')
 
 \d gtest_child3
-              Table "generated_virtual_tests.gtest_child3"
- Column |  Type  | Collation | Nullable |            Default            
---------+--------+-----------+----------+-------------------------------
+                  Table "generated_virtual_tests.gtest_child3"
+ Column |  Type  | Collation | Nullable |                Default                
+--------+--------+-----------+----------+---------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 33)
+ f3     | bigint |           |          | generated always as (f2 * 33) virtual
 Partition of: gtest_parent FOR VALUES FROM ('09-01-2016') TO ('10-01-2016')
 
 SELECT tableoid::regclass, * FROM gtest_parent ORDER BY 1, 2, 3;
@@ -1015,40 +1015,40 @@ ALTER TABLE gtest_parent DROP CONSTRAINT cc;
 -- alter generation expression of parent and all its children altogether
 ALTER TABLE gtest_parent ALTER COLUMN f3 SET EXPRESSION AS (f2 * 2);
 \d gtest_parent
-       Partitioned table "generated_virtual_tests.gtest_parent"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+           Partitioned table "generated_virtual_tests.gtest_parent"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 2)
+ f3     | bigint |           |          | generated always as (f2 * 2) virtual
 Partition key: RANGE (f1)
 Number of partitions: 3 (Use \d+ to list them.)
 
 \d gtest_child
-              Table "generated_virtual_tests.gtest_child"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+                  Table "generated_virtual_tests.gtest_child"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 2)
+ f3     | bigint |           |          | generated always as (f2 * 2) virtual
 Partition of: gtest_parent FOR VALUES FROM ('07-01-2016') TO ('08-01-2016')
 
 \d gtest_child2
-             Table "generated_virtual_tests.gtest_child2"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+                 Table "generated_virtual_tests.gtest_child2"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 2)
+ f3     | bigint |           |          | generated always as (f2 * 2) virtual
 Partition of: gtest_parent FOR VALUES FROM ('08-01-2016') TO ('09-01-2016')
 
 \d gtest_child3
-             Table "generated_virtual_tests.gtest_child3"
- Column |  Type  | Collation | Nullable |           Default            
---------+--------+-----------+----------+------------------------------
+                 Table "generated_virtual_tests.gtest_child3"
+ Column |  Type  | Collation | Nullable |               Default                
+--------+--------+-----------+----------+--------------------------------------
  f1     | date   |           | not null | 
  f2     | bigint |           |          | 
- f3     | bigint |           |          | generated always as (f2 * 2)
+ f3     | bigint |           |          | generated always as (f2 * 2) virtual
 Partition of: gtest_parent FOR VALUES FROM ('09-01-2016') TO ('10-01-2016')
 
 SELECT tableoid::regclass, * FROM gtest_parent ORDER BY 1, 2, 3;
@@ -1115,15 +1115,15 @@ SELECT * FROM gtest25 ORDER BY a;
 (2 rows)
 
 \d gtest25
-                             Table "generated_virtual_tests.gtest25"
- Column |       Type       | Collation | Nullable |                    Default                    
---------+------------------+-----------+----------+-----------------------------------------------
+                                 Table "generated_virtual_tests.gtest25"
+ Column |       Type       | Collation | Nullable |                        Default                        
+--------+------------------+-----------+----------+-------------------------------------------------------
  a      | integer          |           | not null | 
- b      | integer          |           |          | generated always as (a * 3)
+ b      | integer          |           |          | generated always as (a * 3) virtual
  c      | integer          |           |          | 42
- x      | integer          |           |          | generated always as (c * 4)
+ x      | integer          |           |          | generated always as (c * 4) virtual
  d      | double precision |           |          | 101
- y      | double precision |           |          | generated always as (d * 4::double precision)
+ y      | double precision |           |          | generated always as (d * 4::double precision) virtual
 Indexes:
     "gtest25_pkey" PRIMARY KEY, btree (a)
 
@@ -1139,12 +1139,12 @@ ERROR:  cannot alter type of a column used by a generated column
 DETAIL:  Column "a" is used by generated column "x".
 ALTER TABLE gtest27 ALTER COLUMN x TYPE numeric;
 \d gtest27
-                    Table "generated_virtual_tests.gtest27"
- Column |  Type   | Collation | Nullable |               Default               
---------+---------+-----------+----------+-------------------------------------
+                        Table "generated_virtual_tests.gtest27"
+ Column |  Type   | Collation | Nullable |                   Default                   
+--------+---------+-----------+----------+---------------------------------------------
  a      | integer |           |          | 
  b      | integer |           |          | 
- x      | numeric |           |          | generated always as (((a + b) * 2))
+ x      | numeric |           |          | generated always as (((a + b) * 2)) virtual
 
 SELECT * FROM gtest27;
  a | b  | x  
@@ -1176,12 +1176,12 @@ ALTER TABLE gtest27
   ALTER COLUMN b TYPE bigint,
   ADD COLUMN x bigint GENERATED ALWAYS AS ((a + b) * 2) VIRTUAL;
 \d gtest27
-                  Table "generated_virtual_tests.gtest27"
- Column |  Type  | Collation | Nullable |              Default              
---------+--------+-----------+----------+-----------------------------------
+                      Table "generated_virtual_tests.gtest27"
+ Column |  Type  | Collation | Nullable |                  Default                  
+--------+--------+-----------+----------+-------------------------------------------
  a      | bigint |           |          | 
  b      | bigint |           |          | 
- x      | bigint |           |          | generated always as ((a + b) * 2)
+ x      | bigint |           |          | generated always as ((a + b) * 2) virtual
 
 -- Ideally you could just do this, but not today (and should x change type?):
 ALTER TABLE gtest27
@@ -1190,12 +1190,12 @@ ALTER TABLE gtest27
 ERROR:  cannot alter type of a column used by a generated column
 DETAIL:  Column "a" is used by generated column "x".
 \d gtest27
-                  Table "generated_virtual_tests.gtest27"
- Column |  Type  | Collation | Nullable |              Default              
---------+--------+-----------+----------+-----------------------------------
+                      Table "generated_virtual_tests.gtest27"
+ Column |  Type  | Collation | Nullable |                  Default                  
+--------+--------+-----------+----------+-------------------------------------------
  a      | bigint |           |          | 
  b      | bigint |           |          | 
- x      | bigint |           |          | generated always as ((a + b) * 2)
+ x      | bigint |           |          | generated always as ((a + b) * 2) virtual
 
 SELECT * FROM gtest27;
  a | b  | x  
@@ -1218,11 +1218,11 @@ SELECT * FROM gtest29;
 (2 rows)
 
 \d gtest29
-                Table "generated_virtual_tests.gtest29"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest29"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 
 ALTER TABLE gtest29 ALTER COLUMN a SET EXPRESSION AS (a * 3);  -- error
 ERROR:  column "a" of relation "gtest29" is not a generated column
@@ -1240,11 +1240,11 @@ SELECT * FROM gtest29;
 (2 rows)
 
 \d gtest29
-                Table "generated_virtual_tests.gtest29"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest29"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 3)
+ b      | integer |           |          | generated always as (a * 3) virtual
 
 ALTER TABLE gtest29 ALTER COLUMN b DROP EXPRESSION;  -- not supported
 ERROR:  ALTER TABLE / DROP EXPRESSION is not supported for virtual generated columns
@@ -1262,11 +1262,11 @@ SELECT * FROM gtest29;
 (3 rows)
 
 \d gtest29
-                Table "generated_virtual_tests.gtest29"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest29"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 3)
+ b      | integer |           |          | generated always as (a * 3) virtual
 
 -- check that dependencies between columns have also been removed
 --ALTER TABLE gtest29 DROP COLUMN a;  -- should not drop b
@@ -1281,19 +1281,19 @@ ALTER TABLE gtest30 ALTER COLUMN b DROP EXPRESSION;
 ERROR:  ALTER TABLE / DROP EXPRESSION is not supported for virtual generated columns
 DETAIL:  Column "b" of relation "gtest30" is a virtual generated column.
 \d gtest30
-                Table "generated_virtual_tests.gtest30"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest30"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Number of child tables: 1 (Use \d+ to list them.)
 
 \d gtest30_1
-               Table "generated_virtual_tests.gtest30_1"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest30_1"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Inherits:
     gtest30
 
@@ -1307,19 +1307,19 @@ CREATE TABLE gtest30_1 () INHERITS (gtest30);
 ALTER TABLE ONLY gtest30 ALTER COLUMN b DROP EXPRESSION;  -- error
 ERROR:  ALTER TABLE / DROP EXPRESSION must be applied to child tables too
 \d gtest30
-                Table "generated_virtual_tests.gtest30"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                    Table "generated_virtual_tests.gtest30"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Number of child tables: 1 (Use \d+ to list them.)
 
 \d gtest30_1
-               Table "generated_virtual_tests.gtest30_1"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest30_1"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  a      | integer |           |          | 
- b      | integer |           |          | generated always as (a * 2)
+ b      | integer |           |          | generated always as (a * 2) virtual
 Inherits:
     gtest30
 
@@ -1506,19 +1506,19 @@ CREATE TABLE gtest28a (
 ALTER TABLE gtest28a DROP COLUMN a;
 CREATE TABLE gtest28b (LIKE gtest28a INCLUDING GENERATED);
 \d gtest28*
-               Table "generated_virtual_tests.gtest28a"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest28a"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  b      | integer |           |          | 
  c      | integer |           |          | 
- x      | integer |           |          | generated always as (b * 2)
+ x      | integer |           |          | generated always as (b * 2) virtual
 
-               Table "generated_virtual_tests.gtest28b"
- Column |  Type   | Collation | Nullable |           Default           
---------+---------+-----------+----------+-----------------------------
+                   Table "generated_virtual_tests.gtest28b"
+ Column |  Type   | Collation | Nullable |               Default               
+--------+---------+-----------+----------+-------------------------------------
  b      | integer |           |          | 
  c      | integer |           |          | 
- x      | integer |           |          | generated always as (b * 2)
+ x      | integer |           |          | generated always as (b * 2) virtual
 
 -- sanity check of system catalog
 SELECT attrelid, attname, attgenerated FROM pg_attribute WHERE attgenerated NOT IN ('', 's', 'v');
-- 
2.43.0



view thread (3+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: Show VIRTUAL keyword for virtual generated columns in pg_dump and psql
  In-Reply-To: <CA+3i_M8j0WqTF3_BEWkAdJk=5DjaQQhefP-yVZ1O15F_qT52kg@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox