postgres.git / summary / log / commit / refs

commit    33215d113d61980a4b2f2aec36cdcd21fa58c1c4
Author:   Peter Eisentraut <peter@eisentraut.org>
Date:     Thu Apr 04 07:24:48 2019 +0000

    file_fdw: Fix for generated columns
    
    Since file_fdw uses COPY internally, but COPY doesn't allow listing
    generated columns in its column list, we need to make sure that we
    don't add generated columns to the column lists internally generated
    by file_fdw.
    
    Reported-by: Erik Rijkers <er@xs4all.nl>


contrib/file_fdw/file_fdw.c | 4 ++++ contrib/file_fdw/input/file_fdw.source | 6 ++++++ contrib/file_fdw/output/file_fdw.source | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c index 391cd0d778d..85534a3a768 100644 --- a/contrib/file_fdw/file_fdw.c +++ b/contrib/file_fdw/file_fdw.c @@ -922,6 +922,10 @@ check_selective_binary_conversion(RelOptInfo *baserel, /* Skip dropped attributes (probably shouldn't see any here). */ if (attr->attisdropped) continue; + /* Skip generated columns (COPY won't accept them in the column + * list) */ + if (attr->attgenerated) + continue; *columns = lappend(*columns, makeString(pstrdup(attname))); } } diff --git a/contrib/file_fdw/input/file_fdw.source b/contrib/file_fdw/input/file_fdw.source index a5e79a4549a..45b728eeb3d 100644 --- a/contrib/file_fdw/input/file_fdw.source +++ b/contrib/file_fdw/input/file_fdw.source @@ -189,6 +189,12 @@ SELECT tableoid::regclass, * FROM p1; SELECT tableoid::regclass, * FROM p2; DROP TABLE pt; +-- generated column tests +CREATE FOREIGN TABLE gft1 (a int, b text, c text GENERATED ALWAYS AS ('foo') STORED) SERVER file_server +OPTIONS (format 'csv', filename '@abs_srcdir@/data/list1.csv', delimiter ','); +SELECT a, c FROM gft1; +DROP FOREIGN TABLE gft1; + -- privilege tests SET ROLE regress_file_fdw_superuser; SELECT * FROM agg_text ORDER BY a; diff --git a/contrib/file_fdw/output/file_fdw.source b/contrib/file_fdw/output/file_fdw.source index 853c9f9b28b..52b4d5f1df7 100644 --- a/contrib/file_fdw/output/file_fdw.source +++ b/contrib/file_fdw/output/file_fdw.source @@ -375,6 +375,17 @@ SELECT tableoid::regclass, * FROM p2; (3 rows) DROP TABLE pt; +-- generated column tests +CREATE FOREIGN TABLE gft1 (a int, b text, c text GENERATED ALWAYS AS ('foo') STORED) SERVER file_server +OPTIONS (format 'csv', filename '@abs_srcdir@/data/list1.csv', delimiter ','); +SELECT a, c FROM gft1; + a | c +---+-------- + 1 | _null_ + 1 | _null_ +(2 rows) + +DROP FOREIGN TABLE gft1; -- privilege tests SET ROLE regress_file_fdw_superuser; SELECT * FROM agg_text ORDER BY a; [parent: 6f0e190056fe]