COPY WHERE clause generated/system column reference
jian he <jian.universality@gmail.com>
From: jian he <jian.universality@gmail.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-10-27T08:20:37Z
Lists: pgsql-hackers
Attachments
- v1-0002-fix-COPY-WHERE-clause-generated-column-references.patch (text/x-patch) patch v1-0002
- v1-0001-diallow-COPY-WHERE-clause-system-column-references.patch (text/x-patch) patch v1-0001
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
Commits
-
Disallow generated columns in COPY WHERE clause
- 3717849e622d 13.23 landed
- ccfe28eb4237 14.20 landed
- 8278737bfd0a 15.15 landed
- 26958f4d99b1 16.11 landed
- 07f787e57399 17.7 landed
- 0f9e0068bc62 18.1 landed
- aa606b9316a3 19 (unreleased) landed
-
Tighten check for generated column in partition key expression
- ba99c9491c44 18.1 cited