Re: COPY WHERE clause generated/system column reference

Поиск
Список
Период
Сортировка
От Kirill Reshke
Тема Re: COPY WHERE clause generated/system column reference
Дата
Msg-id CALdSSPiCkTjmrvR2VtmovK1__K9DYW1EB+mTNMBT8RQJnb_mfg@mail.gmail.com
обсуждение исходный текст
Ответ на COPY WHERE clause generated/system column reference  (jian he <jian.universality@gmail.com>)
Ответы Re: COPY WHERE clause generated/system column reference
Список pgsql-hackers
On Mon, 27 Oct 2025 at 13:21, jian he <jian.universality@gmail.com> wrote:
>
> hi.
>
> CREATE TABLE gtest0 (a int, b int GENERATED ALWAYS AS (a + 1) VIRTUAL);
> copy gtest0 from stdin where (b <> 1);
> 0
> \.
>
> ERROR:  unexpected virtual generated column reference
> CONTEXT:  COPY gtest0, line 1: "0"
>
> We need to apply expand_generated_columns_in_expr to the whereClause in DoCopy.
> However, handling STORED generated columns appears to be less straightforward.
>
> currently:
> ExecQual(cstate->qualexpr, econtext))
> happen before
> ExecComputeStoredGenerated.
>
> when calling ExecQual, the stored generated column values have not been
> populated yet. so we may need ExecComputeStoredGenerated beforehand.
> Since ExecComputeStoredGenerated is likely expensive, I added logic to detect
> whether the WHERE clause actually have stored generated columns reference before
> calling it.
>
> generated column allow tableoid system column reference, COPY WHERE clause also
> allow tableoid column reference, should be fine.
>
> please check the attached file:
> v1-0001 fix COPY WHERE with system column reference
> v1-0002 fix COPY WHERE with generated column reference

Hi! Indeed, copying from with generated column in where clause is
broken on HEAD.

I applied your patches, they indeed fix the issue.

Small comment: in 0002:

> + if (has_stored_generated)
> + ExecComputeStoredGenerated(resultRelInfo, estate, myslot,
> +   CMD_INSERT);

Should we use CMD_UTILITY here? Comment in nodes.h suggests so. Also,
ExecComputeStoredGenerated only check for equality with CMD_UPDATE, so
this is just a cosmetic change.



-- 
Best regards,
Kirill Reshke



В списке pgsql-hackers по дате отправления: