From: | Richard Guo <guofenglinux(at)gmail(dot)com> |
---|---|
To: | Alexander Lakhin <exclusion(at)gmail(dot)com> |
Cc: | Peter Eisentraut <peter(at)eisentraut(dot)org>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, jian he <jian(dot)universality(at)gmail(dot)com>, Zhang Mingli <zmlpostgres(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Virtual generated columns |
Date: | 2025-05-16 07:26:01 |
Message-ID: | CAMbWs4-ow3ZCj=+07GBr6-umNQ6Bg-HkQAofyXDxZET1aJa63g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Fri, May 16, 2025 at 1:00 PM Alexander Lakhin <exclusion(at)gmail(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Xuneng Zhou | 2025-05-16 07:58:01 | Re: Add pg_buffercache_mark_dirty[_all] functions to the pg_buffercache |
Previous Message | Amit Kapila | 2025-05-16 06:47:05 | Re: Conflict detection for update_deleted in logical replication |