diff --git a/src/bin/psql/copy.cpp b/src/bin/psql/copy.cpp index 401616cc9..2c52063fd 100644 --- a/src/bin/psql/copy.cpp +++ b/src/bin/psql/copy.cpp @@ -226,12 +226,12 @@ static bool ParseParallelOption(struct copy_options* result, char** errToken) xstrcat(&result->after_tofrom, token); token = strtokx(nullptr, whitespace, ",()", NULL, 0, false, false, pset.encoding); - if (pg_strcasecmp(token, "true") == 0 || pg_strcasecmp(token, "on") == 0) { - result->hasHeader = true; - xstrcat(&result->after_tofrom, " false"); - } else { + if (token != nullptr) { + bool res = (pg_strcasecmp(token, "true") == 0 || pg_strcasecmp(token, "on") == 0); + result->hasHeader = (result->hasHeader || res); + const char *resToken = res ? "false" : token; xstrcat(&result->after_tofrom, " "); - xstrcat(&result->after_tofrom, token); + xstrcat(&result->after_tofrom, resToken); } } else { xstrcat(&result->after_tofrom, " "); diff --git a/src/test/regress/expected/copy2.out b/src/test/regress/expected/copy2.out index 68f2fdb3b..cb8776427 100644 --- a/src/test/regress/expected/copy2.out +++ b/src/test/regress/expected/copy2.out @@ -363,3 +363,13 @@ drop trigger insert_measurement_trigger on measurement; drop function measurement_insert_trigger; drop table measurement; drop table measurement_movement; +create table copy_header_src (c1 int); +create table copy_header_dest (c1 int); +insert into copy_header_src select generate_series(1,10); +\copy copy_header_src to '~/copy_header_src.csv' with csv header; +\copy copy_header_dest from '~/copy_header_src.csv' with csv header'on'; +ERROR: syntax error at or near "'on'" +LINE 1: COPY copy_header_dest FROM STDIN csv header'on'; + ^ +drop table copy_header_src; +drop table copy_header_dest; diff --git a/src/test/regress/sql/copy2.sql b/src/test/regress/sql/copy2.sql index df3ad4292..b77eba045 100644 --- a/src/test/regress/sql/copy2.sql +++ b/src/test/regress/sql/copy2.sql @@ -271,3 +271,12 @@ drop trigger insert_measurement_trigger on measurement; drop function measurement_insert_trigger; drop table measurement; drop table measurement_movement; + +create table copy_header_src (c1 int); +create table copy_header_dest (c1 int); +insert into copy_header_src select generate_series(1,10); +\copy copy_header_src to '~/copy_header_src.csv' with csv header; +\copy copy_header_dest from '~/copy_header_src.csv' with csv header'on'; + +drop table copy_header_src; +drop table copy_header_dest;