Re: Virtual generated columns - Mailing list pgsql-hackers

From Richard Guo
Subject Re: Virtual generated columns
Date
Msg-id CAMbWs4-ow3ZCj=+07GBr6-umNQ6Bg-HkQAofyXDxZET1aJa63g@mail.gmail.com
Whole thread Raw
In response to Re: Virtual generated columns  (Alexander Lakhin <exclusion@gmail.com>)
List pgsql-hackers
On Fri, May 16, 2025 at 1:00 PM Alexander Lakhin <exclusion@gmail.com> wrote:
> I've discovered yet another way to trigger that error:
> create table vt (a int, b int generated always as (a * 2), c int);
> insert into vt values(1);
> alter table vt alter column c type bigint using b + c;
>
> ERROR:  XX000: unexpected virtual generated column reference
> LOCATION:  CheckVarSlotCompatibility, execExprInterp.c:2410

Thank you for the report.  It seems that we fail to expand references
to virtual generated columns in the NewColumnValues expression when
altering tables.  We might be able to fix it by:

@@ -6203,7 +6203,7 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap)
        NewColumnValue *ex = lfirst(l);

        /* expr already planned */
-       ex->exprstate = ExecInitExpr((Expr *) ex->expr, NULL);
+       ex->exprstate = ExecInitExpr((Expr *)
expand_generated_columns_in_expr((Node *) ex->expr, oldrel, 1), NULL);

Thanks
Richard



pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: Conflict detection for update_deleted in logical replication
Next
From: Xuneng Zhou
Date:
Subject: Re: Add pg_buffercache_mark_dirty[_all] functions to the pg_buffercache