On 16/01/26 08:31, jian he wrote:
On Thu, Jan 15, 2026 at 11:29 PM Matheus Alcantara
<[email protected]> wrote:

+       /*
+        * Find everything that depends on the column (constraints, indexes, 
etc),
+        * and record enough information to let us recreate the objects after
+        * rewrite.
+        */
+       RememberAllDependentForRebuilding(tab, AT_SetExpression, rel, attnum, 
colName);
+
Perhaps this comments should be updated since we are now collecting
these dependencies for virtual generated columns too that it not require
a table rewrite.

---

I guess we can change it as:

     /*
      * Find everything that depends on the column (constraints, indexes, etc),
      * and record enough information to let us recreate the objects.
      */
     RememberAllDependentForRebuilding(tab, AT_SetExpression, rel,
attnum, colName);

It looks good.


I think that it would be good to update the SET EXPRESSION AS
documentation on doc/src/sgml/ref/alter_table.sgml to mention that for
virtual columns the table is not rewritten but a full table scan may
still be needed if the column has check constraints.


In doc/src/sgml/ref/alter_table.sgml, I intended to change it as follows:

    <varlistentry id="sql-altertable-desc-set-expression">
     <term><literal>SET EXPRESSION AS</literal></term>
     <listitem>
      <para>
       This form replaces the expression of a generated column.  Existing data
       in a stored generated column is rewritten and all the future changes
       will apply the new generation expression.
+      Virtual generated columns do not require a table rewrite.
+      However if the column is part of a <literal>CHECK</literal> constraint
+      expression, the constraint will be rebuilt, requiring a table scan to
+      ensure that existing rows meet the constraint.
      </para>

Sounds good.


--
Matheus Alcantara
EDB: https://www.enterprisedb.com


Reply via email to