diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 84254d46a67..c11c2eb48fa 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -972,8 +972,8 @@ ProcessCopyOptions(ParseState *pstate, /* Check json format */ if (opts_out->format == COPY_FORMAT_JSON && is_from) ereport(ERROR, - errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("COPY %s mode cannot be used with %s", "JSON", "COPY FROM")); + errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("COPY %s is not supported for %s", "FORMAT JSON", "COPY FROM")); if (opts_out->format != COPY_FORMAT_JSON && opts_out->force_array) ereport(ERROR, diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c index 85ca7c947f3..de280ad8612 100644 --- a/src/backend/commands/copyto.c +++ b/src/backend/commands/copyto.c @@ -1061,8 +1061,8 @@ BeginCopyTo(ParseState *pstate, cstate->tupDesc = BlessTupleDesc(resultDesc); /* - * * Pre-allocate arrays for projecting selected column values - * into sequential positions matching the custom TupleDesc. + * Pre-allocate arrays for projecting selected column values into + * sequential positions matching the custom TupleDesc. */ cstate->json_projvalues = palloc_array(Datum, natts); cstate->json_projnulls = palloc_array(bool, natts); diff --git a/src/test/regress/expected/copy.out b/src/test/regress/expected/copy.out index bcf45845b61..3e566b96183 100644 --- a/src/test/regress/expected/copy.out +++ b/src/test/regress/expected/copy.out @@ -136,7 +136,7 @@ LINE 1: copy copytest to stdout (format json, on_error ignore); copy copytest to stdout (format json, reject_limit 1); ERROR: COPY REJECT_LIMIT requires ON_ERROR to be set to IGNORE copy copytest from stdin(format json); -ERROR: COPY JSON mode cannot be used with COPY FROM +ERROR: COPY FORMAT JSON is not supported for COPY FROM -- all of the above should yield error -- column list with json format copy copytest (style, test, filler) to stdout (format json); @@ -167,6 +167,10 @@ copy copytest to stdout (format json, force_array false); {"style":"Unix","test":"abc\ndef","filler":2} {"style":"Mac","test":"abc\rdef","filler":3} {"style":"esc\\ape","test":"a\\r\\\r\\\n\\nb","filler":4} +-- empty result set with force_array +copy (select 1 where false) to stdout (format json, force_array true); +[ +] -- column list with diverse data types create temp table copyjsontest_types ( id int, diff --git a/src/test/regress/sql/copy.sql b/src/test/regress/sql/copy.sql index bc12ac879ef..520934271ec 100644 --- a/src/test/regress/sql/copy.sql +++ b/src/test/regress/sql/copy.sql @@ -119,6 +119,9 @@ copy copytest to stdout (format json, force_array); copy copytest(style, test) to stdout (format json, force_array true); copy copytest to stdout (format json, force_array false); +-- empty result set with force_array +copy (select 1 where false) to stdout (format json, force_array true); + -- column list with diverse data types create temp table copyjsontest_types ( id int,