diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index c39218f8dbb..6ffc3a62f67 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -2793,7 +2793,7 @@ CopyFrom(CopyState cstate) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot perform FREEZE on a partitioned table"))); + errmsg("cannot perform COPY FREEZE on a partitioned table"))); } /* @@ -2808,13 +2808,13 @@ CopyFrom(CopyState cstate) if (!ThereAreNoPriorRegisteredSnapshots() || !ThereAreNoReadyPortals()) ereport(ERROR, (errcode(ERRCODE_INVALID_TRANSACTION_STATE), - errmsg("cannot perform FREEZE because of prior transaction activity"))); + errmsg("cannot perform COPY FREEZE because of prior transaction activity"))); if (cstate->rel->rd_createSubid != GetCurrentSubTransactionId() && cstate->rel->rd_newRelfilenodeSubid != GetCurrentSubTransactionId()) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("cannot perform FREEZE because the table was not created or truncated in the current subtransaction"))); + errmsg("cannot perform COPY FREEZE because the table was not created or truncated in the current subtransaction"))); ti_options |= TABLE_INSERT_FROZEN; } diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index 4d48be0b92e..0d32f2d6e34 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -129,7 +129,7 @@ parse_publication_options(List *options, else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("unrecognized publication parameter: %s", defel->defname))); + errmsg("unrecognized publication parameter: \"%s\"", defel->defname))); } } diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index a60a15193a4..b1793b196f2 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -185,7 +185,7 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given, else ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("unrecognized subscription parameter: %s", defel->defname))); + errmsg("unrecognized subscription parameter: \"%s\"", defel->defname))); } /* @@ -198,17 +198,20 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given, if (enabled && *enabled_given && *enabled) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("connect = false and enabled = true are mutually exclusive options"))); + errmsg("%s and %s are mutually exclusive options", + "connect = false", "enabled = true"))); if (create_slot && create_slot_given && *create_slot) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("connect = false and create_slot = true are mutually exclusive options"))); + errmsg("%s and %s are mutually exclusive options", + "connect = false", "create_slot = true"))); if (copy_data && copy_data_given && *copy_data) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("connect = false and copy_data = true are mutually exclusive options"))); + errmsg("%s and %s are mutually exclusive options", + "connect = false", "copy_data = true"))); /* Change the defaults of other options. */ *enabled = false; @@ -225,22 +228,27 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given, if (enabled && *enabled_given && *enabled) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("slot_name = NONE and enabled = true are mutually exclusive options"))); + errmsg("%s and %s are mutually exclusive options", + "slot_name = NONE", "enable = true"))); if (create_slot && create_slot_given && *create_slot) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("slot_name = NONE and create_slot = true are mutually exclusive options"))); + errmsg("%s and %s are mutually exclusive options", + "slot_name = NONE", "create_slot = true"))); if (enabled && !*enabled_given && *enabled) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("subscription with slot_name = NONE must also set enabled = false"))); + errmsg("subscription with %s must also set %s", + "slot_name = NONE", "enabled = false"))); if (create_slot && !create_slot_given && *create_slot) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("subscription with slot_name = NONE must also set create_slot = false"))); + errmsg("subscription with %s must also set %s", + "slot_name = NONE", "create_slot = false" + ))); } } @@ -487,9 +495,8 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel) } else ereport(WARNING, - (errmsg("tables were not subscribed, you will have to run " - "ALTER SUBSCRIPTION ... REFRESH PUBLICATION to " - "subscribe the tables"))); + (errmsg("tables were not subscribed, you will have to run %s to subscribe the tables", + "ALTER SUBSCRIPTION ... REFRESH PUBLICATION"))); table_close(rel, RowExclusiveLock); @@ -673,7 +680,8 @@ AlterSubscription(AlterSubscriptionStmt *stmt) if (sub->enabled && !slotname) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("cannot set slot_name = NONE for enabled subscription"))); + errmsg("cannot set %s for enabled subscription", + "slot_name = NONE"))); if (slotname) values[Anum_pg_subscription_subslotname - 1] = diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index baeb13e6a0c..85210f13d8d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -10231,6 +10231,7 @@ ATPrepAlterColumnType(List **wqueue, if (!is_expr) ereport(ERROR, (errcode(ERRCODE_INVALID_TABLE_DEFINITION), + /* XXX "named" ?? */ errmsg("cannot alter type of column named in partition key"))); else ereport(ERROR, @@ -15116,14 +15117,14 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu if (strategy == PARTITION_STRATEGY_HASH) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("data type %s has no default hash operator class", - format_type_be(atttype)), + errmsg("data type %s has no default operator class for access method \"%s\"", + format_type_be(atttype), "hash"), errhint("You must specify a hash operator class or define a default hash operator class for the data type."))); else ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("data type %s has no default btree operator class", - format_type_be(atttype)), + errmsg("data type %s has no default operator class for access method \"%s\"", + format_type_be(atttype), "btree"), errhint("You must specify a btree operator class or define a default btree operator class for the data type."))); } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 400558b552b..bd6f3c80445 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -2599,7 +2599,7 @@ transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt) if (stmt->into->rel->relpersistence == RELPERSISTENCE_UNLOGGED) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("materialized views cannot be UNLOGGED"))); + errmsg("materialized views cannot be unlogged"))); /* * At runtime, we'll need a copy of the parsed-but-not-rewritten Query diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index 24f0d5c08c5..2d79c972d7a 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -724,6 +724,7 @@ op_error(ParseState *pstate, List *op, char oprkind, errmsg("operator does not exist: %s", op_signature_string(op, oprkind, arg1, arg2)), (!arg1 || !arg2) ? + /* XXX errhint_plural? */ errhint("No operator matches the given name and argument type. " "You might need to add an explicit type cast.") : errhint("No operator matches the given name and argument types. " diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 71ffb1345b6..aee506cc6f7 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2028,7 +2028,7 @@ retry1: continue; ereport(COMMERROR, (errcode_for_socket_access(), - errmsg("failed to send GSSAPI negotiation response: %m)"))); + errmsg("failed to send GSSAPI negotiation response: %m"))); return STATUS_ERROR; /* close the connection */ } @@ -2651,11 +2651,12 @@ SIGHUP_handler(SIGNAL_ARGS) /* Reload authentication config files too */ if (!load_hba()) ereport(LOG, - (errmsg("pg_hba.conf was not reloaded"))); + /* translator: %s is a configuration file */ + (errmsg("%s was not reloaded", "pg_hba.conf"))); if (!load_ident()) ereport(LOG, - (errmsg("pg_ident.conf was not reloaded"))); + (errmsg("%s was not reloaded", "pg_ident.conf"))); #ifdef USE_SSL /* Reload SSL configuration as well */ diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 36dcb287540..03169577e54 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1439,6 +1439,7 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf if (verify_checksum && (cnt % BLCKSZ != 0)) { + /* XXX is it okay to use %d for BlockNumber everywhere? */ ereport(WARNING, (errmsg("cannot verify checksum in file \"%s\", block " "%d: read buffer size %d and page size %d " @@ -1516,16 +1517,13 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf if (checksum_failures <= 5) ereport(WARNING, - (errmsg("checksum verification failed in " - "file \"%s\", block %d: calculated " - "%X but expected %X", + (errmsg("checksum verification failed in file \"%s\", block %d: calculated %X but expected %X", readfilename, blkno, checksum, phdr->pd_checksum))); if (checksum_failures == 5) ereport(WARNING, - (errmsg("further checksum verification " - "failures in file \"%s\" will not " - "be reported", readfilename))); + (errmsg("further checksum verification failures in file \"%s\" will not be reported", + readfilename))); } } block_retry = false; @@ -1581,8 +1579,8 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf if (checksum_failures > 1) { ereport(WARNING, - (errmsg("file \"%s\" has a total of %d checksum verification " - "failures", readfilename, checksum_failures))); + (errmsg("file \"%s\" has a total of %d checksum verification failures", + readfilename, checksum_failures))); pgstat_report_checksum_failures_in_db(dboid, checksum_failures); } @@ -1617,8 +1615,7 @@ _tarWriteHeader(const char *filename, const char *linktarget, break; case TAR_SYMLINK_TOO_LONG: ereport(ERROR, - (errmsg("symbolic link target too long for tar format: " - "file name \"%s\", target \"%s\"", + (errmsg("symbolic link target too long for tar format: file name \"%s\", target \"%s\"", filename, linktarget))); break; default: diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index 440b6aac4bc..eb379658562 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -903,8 +903,8 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) { if (IsTransactionBlock()) ereport(ERROR, - (errmsg("CREATE_REPLICATION_SLOT ... EXPORT_SNAPSHOT " - "must not be called inside a transaction"))); + (errmsg("%s must not be called inside a transaction", + "CREATE_REPLICATION_SLOT ... EXPORT_SNAPSHOT"))); need_full_snapshot = true; } @@ -912,23 +912,23 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd) { if (!IsTransactionBlock()) ereport(ERROR, - (errmsg("CREATE_REPLICATION_SLOT ... USE_SNAPSHOT " - "must be called inside a transaction"))); + (errmsg("%s must be called inside a transaction", + "CREATE_REPLICATION_SLOT ... USE_SNAPSHOT"))); if (XactIsoLevel != XACT_REPEATABLE_READ) ereport(ERROR, - (errmsg("CREATE_REPLICATION_SLOT ... USE_SNAPSHOT " - "must be called in REPEATABLE READ isolation mode transaction"))); + (errmsg("%s must be called in REPEATABLE READ isolation mode transaction", + "CREATE_REPLICATION_SLOT ... USE_SNAPSHOT"))); if (FirstSnapshotSet) ereport(ERROR, - (errmsg("CREATE_REPLICATION_SLOT ... USE_SNAPSHOT " - "must be called before any query"))); + (errmsg("%s must be called before any query", + "CREATE_REPLICATION_SLOT ... USE_SNAPSHOT"))); if (IsSubTransaction()) ereport(ERROR, - (errmsg("CREATE_REPLICATION_SLOT ... USE_SNAPSHOT " - "must not be called in a subtransaction"))); + (errmsg("%s must not be called in a subtransaction", + "CREATE_REPLICATION_SLOT ... USE_SNAPSHOT"))); need_full_snapshot = true; } diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 39080776b04..6a8679c6c3f 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -3741,23 +3741,30 @@ RewriteQuery(Query *parsetree, List *rewrite_events) case CMD_INSERT: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot perform INSERT RETURNING on relation \"%s\"", + errmsg("cannot perform %s on relation \"%s\"", + "INSERT RETURNING", RelationGetRelationName(rt_entry_relation)), - errhint("You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause."))); + /*- translator: %s is SQL such as ON INSERT DO INSTEAD */ + errhint("You need an unconditional %s rule with a RETURNING clause.", + "ON INSERT DO INSTEAD"))); break; case CMD_UPDATE: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot perform UPDATE RETURNING on relation \"%s\"", + errmsg("cannot perform %s on relation \"%s\"", + "UPDATE RETURNING", RelationGetRelationName(rt_entry_relation)), - errhint("You need an unconditional ON UPDATE DO INSTEAD rule with a RETURNING clause."))); + errhint("You need an unconditional %s rule with a RETURNING clause.", + "ON UPDATE DO INSTEAD"))); break; case CMD_DELETE: ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot perform DELETE RETURNING on relation \"%s\"", + errmsg("cannot perform %s on relation \"%s\"", + "DELETE RETURNING", RelationGetRelationName(rt_entry_relation)), - errhint("You need an unconditional ON DELETE DO INSTEAD rule with a RETURNING clause."))); + errhint("You need an unconditional %s rule with a RETURNING clause.", + "ON DELETE DO INSTEAD"))); break; default: elog(ERROR, "unrecognized commandType: %d", diff --git a/src/backend/utils/adt/jsonpath.c b/src/backend/utils/adt/jsonpath.c index d53d6d33113..b7f0b4a35e3 100644 --- a/src/backend/utils/adt/jsonpath.c +++ b/src/backend/utils/adt/jsonpath.c @@ -179,7 +179,8 @@ jsonPathFromCstring(char *in, int len) if (!jsonpath) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for jsonpath: \"%s\"", in))); + errmsg("invalid input syntax for type %s: \"%s\"", "jsonpath", + in))); flattenJsonPathParseItem(&buf, jsonpath->expr, 0, false); diff --git a/src/backend/utils/adt/jsonpath_exec.c b/src/backend/utils/adt/jsonpath_exec.c index 2789ed2371f..b6d6a243e52 100644 --- a/src/backend/utils/adt/jsonpath_exec.c +++ b/src/backend/utils/adt/jsonpath_exec.c @@ -1934,7 +1934,7 @@ getJsonPathVariable(JsonPathExecContext *cxt, JsonPathItem *variable, { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("cannot find jsonpath variable \"%s\"", + errmsg("could not find jsonpath variable \"%s\"", pnstrdup(varName, varNameLength)))); } diff --git a/src/backend/utils/adt/jsonpath_scan.l b/src/backend/utils/adt/jsonpath_scan.l index 6ab7c5c9c64..84d4f297a89 100644 --- a/src/backend/utils/adt/jsonpath_scan.l +++ b/src/backend/utils/adt/jsonpath_scan.l @@ -539,7 +539,7 @@ addUnicodeChar(int ch) { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type jsonpath"), + errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("Unicode escape values cannot be used for code " "point values above 007F when the server encoding " "is not UTF8."))); @@ -555,7 +555,7 @@ addUnicode(int ch, int *hi_surrogate) if (*hi_surrogate != -1) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type jsonpath"), + errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("Unicode high surrogate must not follow " "a high surrogate."))); *hi_surrogate = (ch & 0x3ff) << 10; @@ -566,7 +566,7 @@ addUnicode(int ch, int *hi_surrogate) if (*hi_surrogate == -1) ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type jsonpath"), + errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("Unicode low surrogate must follow a high " "surrogate."))); ch = 0x10000 + *hi_surrogate + (ch & 0x3ff); @@ -576,7 +576,7 @@ addUnicode(int ch, int *hi_surrogate) { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type jsonpath"), + errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("Unicode low surrogate must follow a high " "surrogate."))); } @@ -618,7 +618,7 @@ parseUnicode(char *s, int l) { ereport(ERROR, (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), - errmsg("invalid input syntax for type jsonpath"), + errmsg("invalid input syntax for type %s", "jsonpath"), errdetail("Unicode low surrogate must follow a high " "surrogate."))); } diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index da6e2cb5848..2376bda497b 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1603,7 +1603,7 @@ icu_to_uchar(UChar **buff_uchar, const char *buff, size_t nbytes) buff, nbytes, &status); if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) ereport(ERROR, - (errmsg("ucnv_toUChars failed: %s", u_errorName(status)))); + (errmsg("%s failed: %s", "ucnv_toUChars", u_errorName(status)))); *buff_uchar = palloc((len_uchar + 1) * sizeof(**buff_uchar)); @@ -1612,7 +1612,7 @@ icu_to_uchar(UChar **buff_uchar, const char *buff, size_t nbytes) buff, nbytes, &status); if (U_FAILURE(status)) ereport(ERROR, - (errmsg("ucnv_toUChars failed: %s", u_errorName(status)))); + (errmsg("%s failed: %s", "ucnv_toUChars", u_errorName(status)))); return len_uchar; } @@ -1641,7 +1641,8 @@ icu_from_uchar(char **result, const UChar *buff_uchar, int32_t len_uchar) buff_uchar, len_uchar, &status); if (U_FAILURE(status) && status != U_BUFFER_OVERFLOW_ERROR) ereport(ERROR, - (errmsg("ucnv_fromUChars failed: %s", u_errorName(status)))); + (errmsg("%s failed: %s", "ucnv_fromUChars", + u_errorName(status)))); *result = palloc(len_result + 1); @@ -1650,7 +1651,8 @@ icu_from_uchar(char **result, const UChar *buff_uchar, int32_t len_uchar) buff_uchar, len_uchar, &status); if (U_FAILURE(status)) ereport(ERROR, - (errmsg("ucnv_fromUChars failed: %s", u_errorName(status)))); + (errmsg("%s failed: %s", "ucnv_fromUChars", + u_errorName(status)))); return len_result; } diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index da13a875eb0..dbc8263d486 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -423,7 +423,7 @@ parse_re_flags(pg_re_flags *flags, text *opts) default: ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid regexp option: \"%c\"", + errmsg("invalid regular expression option: \"%c\"", opt_p[i]))); break; } @@ -863,7 +863,9 @@ regexp_match(PG_FUNCTION_ARGS) if (re_flags.glob) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("regexp_match does not support the global option"), + /* translator: %s is a SQL function name */ + errmsg("%s does not support the \"global\" option", + "regexp_match()"), errhint("Use the regexp_matches function instead."))); matchctx = setup_regexp_matches(orig_str, pattern, &re_flags, @@ -1241,7 +1243,9 @@ regexp_split_to_table(PG_FUNCTION_ARGS) if (re_flags.glob) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("regexp_split_to_table does not support the global option"))); + /* translator: %s is a SQL function name */ + errmsg("%s does not support the \"global\" option", + "regexp_split_to_table()"))); /* But we find all the matches anyway */ re_flags.glob = true; @@ -1294,7 +1298,9 @@ regexp_split_to_array(PG_FUNCTION_ARGS) if (re_flags.glob) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("regexp_split_to_array does not support the global option"))); + /* translator: %s is a SQL function name */ + errmsg("%s does not support the \"global\" option", + "regexp_split_to_array()"))); /* But we find all the matches anyway */ re_flags.glob = true;