1
0
mirror of https://github.com/postgres/postgres.git synced 2026-01-26 09:41:40 +03:00

Improve the error message in COPY with HEADER option.

The error message reported for invalid values of the HEADER option in COPY
command previously used the term "non-negative integer", which is
discouraged by the Error Message Style Guide because it is ambiguous about
whether zero is allowed.

This commit improves the error message by replacing "non-negative integer"
there with "an integer value greater than or equal to zero" to make
the accepted values explicit.

Author: Shinya Kato <shinya11.kato@gmail.com>
Reviewed-by: Alvaro Herrera <alvherre@kurilemu.de>
Reviewed-by: Steven Niu <niushiji@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CAHGQGwE86PcuPZbP=aurmW7Oo=eycF10gxjErWq4NmY-5TTX4Q@mail.gmail.com
This commit is contained in:
Fujii Masao
2026-01-22 10:13:07 +09:00
parent 25dc485074
commit f3da70a805
3 changed files with 12 additions and 9 deletions

View File

@@ -367,8 +367,9 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt,
/*
* Extract the CopyFormatOptions.header_line value from a DefElem.
*
* Parses the HEADER option for COPY, which can be a boolean, a non-negative
* integer (number of lines to skip), or the special value "match".
* Parses the HEADER option for COPY, which can be a boolean, an integer greater
* than or equal to zero (number of lines to skip), or the special value
* "match".
*/
static int
defGetCopyHeaderOption(DefElem *def, bool is_from)
@@ -380,8 +381,8 @@ defGetCopyHeaderOption(DefElem *def, bool is_from)
return COPY_HEADER_TRUE;
/*
* Allow 0, 1, "true", "false", "on", "off", a non-negative integer, or
* "match".
* Allow an integer value greater than or equal to zero, "true", "false",
* "on", "off", or "match".
*/
switch (nodeTag(def->arg))
{
@@ -433,9 +434,11 @@ defGetCopyHeaderOption(DefElem *def, bool is_from)
}
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("%s requires a Boolean value, a non-negative integer, "
"or the string \"match\"",
def->defname)));
/*- translator: first %s is the name of a COPY option, e.g. ON_ERROR,
second %s is the special value "match" for that option */
errmsg("%s requires a Boolean value, an integer value greater "
"than or equal to zero, or the string \"%s\"",
def->defname, "match")));
return COPY_HEADER_FALSE; /* keep compiler quiet */
}

View File

@@ -247,7 +247,7 @@ alter table header_copytest add column c text;
copy header_copytest to stdout with (header match);
ERROR: cannot use "match" with HEADER in COPY TO
copy header_copytest from stdin with (header wrong_choice);
ERROR: header requires a Boolean value, a non-negative integer, or the string "match"
ERROR: header requires a Boolean value, an integer value greater than or equal to zero, or the string "match"
-- works
copy header_copytest from stdin with (header match);
copy header_copytest (c, a, b) from stdin with (header match);

View File

@@ -135,7 +135,7 @@ ERROR: REJECT_LIMIT (0) must be greater than zero
COPY x from stdin with (header -1);
ERROR: a negative integer value cannot be specified for header
COPY x from stdin with (header 2.5);
ERROR: header requires a Boolean value, a non-negative integer, or the string "match"
ERROR: header requires a Boolean value, an integer value greater than or equal to zero, or the string "match"
COPY x to stdout with (header 2);
ERROR: cannot use multi-line header in COPY TO
-- too many columns in column list: should fail