mirror of https://github.com/postgres/postgres
Tweak detail and hint messages to be consistent with project policy
Detail and hint messages should be full sentences and should end with a period, but some of the messages newly-introduced in v15 did not follow that. Author: Justin Pryzby Reviewed-by: Álvaro Herrera Discussion: https://postgr.es/m/20220719120948.GF12702@telsasoft.com Backpatch-through: 15
This commit is contained in:
parent
ecc84b916f
commit
12c254c99f
|
@ -111,7 +111,7 @@ check_archive_directory(char **newval, void **extra, GucSource source)
|
|||
*/
|
||||
if (strlen(*newval) + 64 + 2 >= MAXPGPATH)
|
||||
{
|
||||
GUC_check_errdetail("archive directory too long");
|
||||
GUC_check_errdetail("Archive directory too long.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -122,7 +122,7 @@ check_archive_directory(char **newval, void **extra, GucSource source)
|
|||
*/
|
||||
if (stat(*newval, &st) != 0 || !S_ISDIR(st.st_mode))
|
||||
{
|
||||
GUC_check_errdetail("specified archive directory does not exist");
|
||||
GUC_check_errdetail("Specified archive directory does not exist.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -9590,7 +9590,7 @@ HINT: Target server's authentication method must be changed or password_require
|
|||
-- Unpriv user cannot make the mapping passwordless
|
||||
ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD password_required 'false');
|
||||
ERROR: password_required=false is superuser-only
|
||||
HINT: User mappings with the password_required option set to false may only be created or modified by the superuser
|
||||
HINT: User mappings with the password_required option set to false may only be created or modified by the superuser.
|
||||
SELECT 1 FROM ft1_nopw LIMIT 1;
|
||||
ERROR: password is required
|
||||
DETAIL: Non-superuser cannot connect if the server does not request a password.
|
||||
|
@ -9611,10 +9611,10 @@ SELECT 1 FROM ft1_nopw LIMIT 1;
|
|||
ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (SET password_required 'true');
|
||||
ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD sslcert 'foo.crt');
|
||||
ERROR: sslcert and sslkey are superuser-only
|
||||
HINT: User mappings with the sslcert or sslkey options set may only be created or modified by the superuser
|
||||
HINT: User mappings with the sslcert or sslkey options set may only be created or modified by the superuser.
|
||||
ALTER USER MAPPING FOR CURRENT_USER SERVER loopback_nopw OPTIONS (ADD sslkey 'foo.key');
|
||||
ERROR: sslcert and sslkey are superuser-only
|
||||
HINT: User mappings with the sslcert or sslkey options set may only be created or modified by the superuser
|
||||
HINT: User mappings with the sslcert or sslkey options set may only be created or modified by the superuser.
|
||||
-- We're done with the role named after a specific user and need to check the
|
||||
-- changes to the public mapping.
|
||||
DROP USER MAPPING FOR CURRENT_USER SERVER loopback_nopw;
|
||||
|
|
|
@ -193,7 +193,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("password_required=false is superuser-only"),
|
||||
errhint("User mappings with the password_required option set to false may only be created or modified by the superuser")));
|
||||
errhint("User mappings with the password_required option set to false may only be created or modified by the superuser.")));
|
||||
}
|
||||
else if (strcmp(def->defname, "sslcert") == 0 ||
|
||||
strcmp(def->defname, "sslkey") == 0)
|
||||
|
@ -203,7 +203,7 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("sslcert and sslkey are superuser-only"),
|
||||
errhint("User mappings with the sslcert or sslkey options set may only be created or modified by the superuser")));
|
||||
errhint("User mappings with the sslcert or sslkey options set may only be created or modified by the superuser.")));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -743,7 +743,7 @@ CheckPubRelationColumnList(List *tables, const char *queryString,
|
|||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
errmsg("cannot use publication column list for relation \"%s\"",
|
||||
RelationGetRelationName(pri->relation)),
|
||||
errdetail("column list cannot be used for a partitioned table when %s is false.",
|
||||
errdetail("Column list cannot be used for a partitioned table when %s is false.",
|
||||
"publish_via_partition_root")));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17790,7 +17790,7 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd,
|
|||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("trigger \"%s\" prevents table \"%s\" from becoming a partition",
|
||||
trigger_name, RelationGetRelationName(attachrel)),
|
||||
errdetail("ROW triggers with transition tables are not supported on partitions")));
|
||||
errdetail("ROW triggers with transition tables are not supported on partitions.")));
|
||||
|
||||
/*
|
||||
* Check that the new partition's bound is valid and does not overlap any
|
||||
|
|
|
@ -3447,7 +3447,7 @@ checkJsonOutputFormat(ParseState *pstate, const JsonFormat *format,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("unsupported JSON encoding"),
|
||||
errhint("only UTF8 JSON encoding is supported"),
|
||||
errhint("Only UTF8 JSON encoding is supported."),
|
||||
parser_errposition(pstate, format->location)));
|
||||
}
|
||||
}
|
||||
|
@ -4580,7 +4580,7 @@ transformJsonSerializeExpr(ParseState *pstate, JsonSerializeExpr *expr)
|
|||
errmsg("cannot use RETURNING type %s in %s",
|
||||
format_type_be(returning->typid),
|
||||
"JSON_SERIALIZE()"),
|
||||
errhint("Try returning a string type or bytea")));
|
||||
errhint("Try returning a string type or bytea.")));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -141,7 +141,7 @@ registerJsonTableColumn(JsonTableContext *cxt, char *colname)
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DUPLICATE_ALIAS),
|
||||
errmsg("duplicate JSON_TABLE column name: %s", colname),
|
||||
errhint("JSON_TABLE column names must be distinct from one another")));
|
||||
errhint("JSON_TABLE column names must be distinct from one another.")));
|
||||
|
||||
cxt->pathNames = lappend(cxt->pathNames, colname);
|
||||
}
|
||||
|
@ -258,7 +258,7 @@ validateJsonTableChildPlan(ParseState *pstate, JsonTablePlan *plan,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid JSON_TABLE plan"),
|
||||
errdetail("plan node for nested path %s was not found in plan", jtc->pathname),
|
||||
errdetail("Plan node for nested path %s was not found in plan.", jtc->pathname),
|
||||
parser_errposition(pstate, jtc->location)));
|
||||
|
||||
nchildren++;
|
||||
|
@ -269,7 +269,7 @@ validateJsonTableChildPlan(ParseState *pstate, JsonTablePlan *plan,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid JSON_TABLE plan"),
|
||||
errdetail("plan node contains some extra or duplicate sibling nodes"),
|
||||
errdetail("Plan node contains some extra or duplicate sibling nodes."),
|
||||
parser_errposition(pstate, plan ? plan->location : -1)));
|
||||
}
|
||||
|
||||
|
@ -385,7 +385,7 @@ transformJsonTableChildPlan(JsonTableContext *cxt, JsonTablePlan *plan,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid JSON_TABLE plan"),
|
||||
errdetail("path name was %s not found in nested columns list",
|
||||
errdetail("Path name was %s not found in nested columns list.",
|
||||
plan->pathname),
|
||||
parser_errposition(cxt->pstate, plan->location)));
|
||||
|
||||
|
@ -586,7 +586,7 @@ transformJsonTableColumns(JsonTableContext *cxt, JsonTablePlan *plan,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid JSON_TABLE plan"),
|
||||
errdetail("expected INNER or OUTER JSON_TABLE plan node"),
|
||||
errdetail("Expected INNER or OUTER JSON_TABLE plan node."),
|
||||
parser_errposition(cxt->pstate, plan->location)));
|
||||
|
||||
parentPlan = plan->plan1;
|
||||
|
@ -605,7 +605,7 @@ transformJsonTableColumns(JsonTableContext *cxt, JsonTablePlan *plan,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid JSON_TABLE plan"),
|
||||
errdetail("path name mismatch: expected %s but %s is given",
|
||||
errdetail("Path name mismatch: expected %s but %s is given.",
|
||||
*pathName, parentPlan->pathname),
|
||||
parser_errposition(cxt->pstate, plan->location)));
|
||||
|
||||
|
|
|
@ -2973,8 +2973,8 @@ JsonPathQuery(Datum jb, JsonPath *jp, JsonWrapper wrapper, bool *empty,
|
|||
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
|
||||
errmsg("JSON path expression in JSON_QUERY should return "
|
||||
"singleton item without wrapper"),
|
||||
errhint("use WITH WRAPPER clause to wrap SQL/JSON item "
|
||||
"sequence into array")));
|
||||
errhint("Use WITH WRAPPER clause to wrap SQL/JSON item "
|
||||
"sequence into array.")));
|
||||
}
|
||||
|
||||
if (first)
|
||||
|
|
|
@ -526,7 +526,7 @@ makeItemLikeRegex(JsonPathParseItem *expr, JsonPathString *pattern,
|
|||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("invalid input syntax for type %s", "jsonpath"),
|
||||
errdetail("unrecognized flag character \"%.*s\" in LIKE_REGEX predicate",
|
||||
errdetail("Unrecognized flag character \"%.*s\" in LIKE_REGEX predicate.",
|
||||
pg_mblen(flags->val + i), flags->val + i)));
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -12551,7 +12551,7 @@ check_client_connection_check_interval(int *newval, void **extra, GucSource sour
|
|||
{
|
||||
if (!WaitEventSetCanReportClosed() && *newval != 0)
|
||||
{
|
||||
GUC_check_errdetail("client_connection_check_interval must be set to 0 on this platform");
|
||||
GUC_check_errdetail("client_connection_check_interval must be set to 0 on this platform.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -716,7 +716,7 @@ SELECT JSON_QUERY(jsonb '[]', '$[*]' ERROR ON ERROR);
|
|||
|
||||
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' ERROR ON ERROR);
|
||||
ERROR: JSON path expression in JSON_QUERY should return singleton item without wrapper
|
||||
HINT: use WITH WRAPPER clause to wrap SQL/JSON item sequence into array
|
||||
HINT: Use WITH WRAPPER clause to wrap SQL/JSON item sequence into array.
|
||||
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' DEFAULT '"empty"' ON ERROR);
|
||||
json_query
|
||||
------------
|
||||
|
@ -1378,7 +1378,7 @@ SELECT * FROM JSON_TABLE(
|
|||
)
|
||||
) jt;
|
||||
ERROR: duplicate JSON_TABLE column name: a
|
||||
HINT: JSON_TABLE column names must be distinct from one another
|
||||
HINT: JSON_TABLE column names must be distinct from one another.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb '[]', '$' AS a
|
||||
COLUMNS (
|
||||
|
@ -1390,7 +1390,7 @@ SELECT * FROM JSON_TABLE(
|
|||
)
|
||||
) jt;
|
||||
ERROR: duplicate JSON_TABLE column name: a
|
||||
HINT: JSON_TABLE column names must be distinct from one another
|
||||
HINT: JSON_TABLE column names must be distinct from one another.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb '[]', '$'
|
||||
COLUMNS (
|
||||
|
@ -1402,7 +1402,7 @@ SELECT * FROM JSON_TABLE(
|
|||
)
|
||||
) jt;
|
||||
ERROR: duplicate JSON_TABLE column name: b
|
||||
HINT: JSON_TABLE column names must be distinct from one another
|
||||
HINT: JSON_TABLE column names must be distinct from one another.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb '[]', '$'
|
||||
COLUMNS (
|
||||
|
@ -1420,7 +1420,7 @@ SELECT * FROM JSON_TABLE(
|
|||
)
|
||||
) jt;
|
||||
ERROR: duplicate JSON_TABLE column name: a
|
||||
HINT: JSON_TABLE column names must be distinct from one another
|
||||
HINT: JSON_TABLE column names must be distinct from one another.
|
||||
-- JSON_TABLE: plan validation
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
|
@ -1438,7 +1438,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 12: PLAN (p1)
|
||||
^
|
||||
DETAIL: path name mismatch: expected p0 but p1 is given
|
||||
DETAIL: Path name mismatch: expected p0 but p1 is given.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1455,7 +1455,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 4: NESTED PATH '$' AS p1 COLUMNS (
|
||||
^
|
||||
DETAIL: plan node for nested path p1 was not found in plan
|
||||
DETAIL: Plan node for nested path p1 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1472,7 +1472,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 4: NESTED PATH '$' AS p1 COLUMNS (
|
||||
^
|
||||
DETAIL: plan node for nested path p1 was not found in plan
|
||||
DETAIL: Plan node for nested path p1 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1489,7 +1489,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 12: PLAN (p0 UNION p1 UNION p11)
|
||||
^
|
||||
DETAIL: expected INNER or OUTER JSON_TABLE plan node
|
||||
DETAIL: Expected INNER or OUTER JSON_TABLE plan node.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1506,7 +1506,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 8: NESTED PATH '$' AS p2 COLUMNS (
|
||||
^
|
||||
DETAIL: plan node for nested path p2 was not found in plan
|
||||
DETAIL: Plan node for nested path p2 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1523,7 +1523,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 5: NESTED PATH '$' AS p11 COLUMNS ( foo int ),
|
||||
^
|
||||
DETAIL: plan node for nested path p11 was not found in plan
|
||||
DETAIL: Plan node for nested path p11 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1540,7 +1540,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 12: PLAN (p0 OUTER ((p1 UNION p11) CROSS p2))
|
||||
^
|
||||
DETAIL: plan node contains some extra or duplicate sibling nodes
|
||||
DETAIL: Plan node contains some extra or duplicate sibling nodes.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1557,7 +1557,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 6: NESTED PATH '$' AS p12 COLUMNS ( bar int )
|
||||
^
|
||||
DETAIL: plan node for nested path p12 was not found in plan
|
||||
DETAIL: Plan node for nested path p12 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', '$[*]' AS p0
|
||||
COLUMNS (
|
||||
|
@ -1574,7 +1574,7 @@ SELECT * FROM JSON_TABLE(
|
|||
ERROR: invalid JSON_TABLE plan
|
||||
LINE 9: NESTED PATH '$' AS p21 COLUMNS ( baz int )
|
||||
^
|
||||
DETAIL: plan node for nested path p21 was not found in plan
|
||||
DETAIL: Plan node for nested path p21 was not found in plan.
|
||||
SELECT * FROM JSON_TABLE(
|
||||
jsonb 'null', 'strict $[*]' AS p0
|
||||
COLUMNS (
|
||||
|
|
|
@ -477,7 +477,7 @@ select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
|
|||
ERROR: invalid input syntax for type jsonpath
|
||||
LINE 1: select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
|
||||
^
|
||||
DETAIL: unrecognized flag character "a" in LIKE_REGEX predicate
|
||||
DETAIL: Unrecognized flag character "a" in LIKE_REGEX predicate.
|
||||
select '$ < 1'::jsonpath;
|
||||
jsonpath
|
||||
----------
|
||||
|
|
|
@ -940,7 +940,7 @@ ALTER PUBLICATION testpub6 SET (PUBLISH_VIA_PARTITION_ROOT=0);
|
|||
-- fail - cannot use column list for partitioned table
|
||||
ALTER PUBLICATION testpub6 SET TABLE rf_tbl_abcd_part_pk (a);
|
||||
ERROR: cannot use publication column list for relation "rf_tbl_abcd_part_pk"
|
||||
DETAIL: column list cannot be used for a partitioned table when publish_via_partition_root is false.
|
||||
DETAIL: Column list cannot be used for a partitioned table when publish_via_partition_root is false.
|
||||
-- ok - can use column list for partition
|
||||
ALTER PUBLICATION testpub6 SET TABLE rf_tbl_abcd_part_pk_1 (a);
|
||||
-- ok - "a" is a PK col
|
||||
|
|
|
@ -317,7 +317,7 @@ SELECT pg_typeof(JSON_SERIALIZE(NULL));
|
|||
-- only string types or bytea allowed
|
||||
SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING jsonb);
|
||||
ERROR: cannot use RETURNING type jsonb in JSON_SERIALIZE()
|
||||
HINT: Try returning a string type or bytea
|
||||
HINT: Try returning a string type or bytea.
|
||||
EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SERIALIZE('{}');
|
||||
QUERY PLAN
|
||||
-----------------------------------------------------
|
||||
|
@ -403,12 +403,12 @@ SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF16);
|
|||
ERROR: unsupported JSON encoding
|
||||
LINE 1: SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF1...
|
||||
^
|
||||
HINT: only UTF8 JSON encoding is supported
|
||||
HINT: Only UTF8 JSON encoding is supported.
|
||||
SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF32);
|
||||
ERROR: unsupported JSON encoding
|
||||
LINE 1: SELECT JSON_OBJECT(RETURNING bytea FORMAT JSON ENCODING UTF3...
|
||||
^
|
||||
HINT: only UTF8 JSON encoding is supported
|
||||
HINT: Only UTF8 JSON encoding is supported.
|
||||
SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON);
|
||||
ERROR: cannot use non-string types with explicit FORMAT JSON clause
|
||||
LINE 1: SELECT JSON_OBJECT('foo': NULL::int FORMAT JSON);
|
||||
|
@ -691,12 +691,12 @@ SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF16);
|
|||
ERROR: unsupported JSON encoding
|
||||
LINE 1: SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF16...
|
||||
^
|
||||
HINT: only UTF8 JSON encoding is supported
|
||||
HINT: Only UTF8 JSON encoding is supported.
|
||||
SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF32);
|
||||
ERROR: unsupported JSON encoding
|
||||
LINE 1: SELECT JSON_ARRAY(RETURNING bytea FORMAT JSON ENCODING UTF32...
|
||||
^
|
||||
HINT: only UTF8 JSON encoding is supported
|
||||
HINT: Only UTF8 JSON encoding is supported.
|
||||
SELECT JSON_ARRAY('aaa', 111, true, array[1,2,3], NULL, json '{"a": [1]}', jsonb '["a",3]');
|
||||
json_array
|
||||
-----------------------------------------------------
|
||||
|
|
|
@ -2951,7 +2951,7 @@ create trigger child_row_trig
|
|||
-- but now we're not allowed to reattach it
|
||||
alter table parent attach partition child for values in ('AAA');
|
||||
ERROR: trigger "child_row_trig" prevents table "child" from becoming a partition
|
||||
DETAIL: ROW triggers with transition tables are not supported on partitions
|
||||
DETAIL: ROW triggers with transition tables are not supported on partitions.
|
||||
-- drop the trigger, and now we're allowed to attach it again
|
||||
drop trigger child_row_trig on child;
|
||||
alter table parent attach partition child for values in ('AAA');
|
||||
|
|
Loading…
Reference in New Issue