diff --git a/src/bin/psql/copy.cpp b/src/bin/psql/copy.cpp index 401616cc99daa13b018a70c66060d06e3e3ea23e..2c52063fd30b9c084692cdbef95338e3dfbed414 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 68f2fdb3b20b7232693587613c2694880ee68de5..cb87764270f022bff2e87bcc50db4938d1e203ba 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 df3ad4292bcd9fdfe45c050772683b9c4d5d916b..b77eba045f1884a63c15715e5bce52cb00d2ffc4 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;