if (oldest_datname)
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
- errmsg("database is not accepting commands that assign new XIDs to avoid wraparound data loss in database \"%s\"",
+ errmsg("database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database \"%s\"",
oldest_datname),
errhint("Execute a database-wide VACUUM in that database.\n"
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
else
ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
- errmsg("database is not accepting commands that assign new XIDs to avoid wraparound data loss in database with OID %u",
+ errmsg("database is not accepting commands that assign new transaction IDs to avoid wraparound data loss in database with OID %u",
oldest_datoid),
errhint("Execute a database-wide VACUUM in that database.\n"
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
(errmsg("database \"%s\" must be vacuumed within %u transactions",
oldest_datname,
xidWrapLimit - xid),
- errhint("To avoid XID assignment failures, execute a database-wide VACUUM in that database.\n"
+ errhint("To avoid transaction ID assignment failures, execute a database-wide VACUUM in that database.\n"
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
else
ereport(WARNING,
if (IsInParallelMode() || IsParallelWorker())
ereport(ERROR,
(errcode(ERRCODE_INVALID_TRANSACTION_STATE),
- errmsg("cannot assign XIDs during a parallel operation")));
+ errmsg("cannot assign transaction IDs during a parallel operation")));
/*
* Ensure parent(s) have XIDs, so that a child always has an XID later
if (manifest_system_identifier != system_identifier)
context->error_cb(context,
- "manifest system identifier is %llu, but database system identifier is %llu",
+ "system identifier in backup manifest is %llu, but database system identifier is %llu",
(unsigned long long) manifest_system_identifier,
(unsigned long long) system_identifier);
}
attval = CopyLimitPrintoutLength(cstate->cur_attval);
ereport(NOTICE,
- errmsg("skipping row due to data type incompatibility at line %llu for column %s: \"%s\"",
+ errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
(unsigned long long) cstate->cur_lineno,
cstate->cur_attname,
attval));
}
else
ereport(NOTICE,
- errmsg("skipping row due to data type incompatibility at line %llu for column %s: null input",
+ errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
(unsigned long long) cstate->cur_lineno,
cstate->cur_attname));
if (sub->enabled)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("cannot set %s for enabled subscription",
+ errmsg("cannot set option \"%s\" for enabled subscription",
option)));
if (slot_needs_update)
if (!sub->slotname)
ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("cannot set %s for a subscription that does not have a slot name",
+ errmsg("cannot set option \"%s\" for a subscription that does not have a slot name",
option)));
/* The changed option of the slot can't be rolled back. */
if (fk->confrelid == RelationGetRelid(partRel))
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
- errmsg("can't attach table \"%s\" as a partition which is referenced by foreign key \"%s\"",
+ errmsg("cannot attach table \"%s\" as a partition because it is referenced by foreign key \"%s\"",
RelationGetRelationName(partRel),
get_constraint_name(fk->conoid))));
current_time) / 1000;
ereport(WARNING,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("still waiting for WAL summarization through %X/%X after %ld seconds",
- LSN_FORMAT_ARGS(lsn),
- elapsed_seconds),
+ errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second",
+ "still waiting for WAL summarization through %X/%X after %ld seconds",
+ elapsed_seconds,
+ LSN_FORMAT_ARGS(lsn),
+ elapsed_seconds),
errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
LSN_FORMAT_ARGS(summarized_lsn),
LSN_FORMAT_ARGS(pending_lsn))));
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot use replication slot \"%s\" for logical decoding",
NameStr(slot->data.name)),
- errdetail("This slot is being synchronized from the primary server."),
+ errdetail("This replication slot is being synchronized from the primary server."),
errhint("Specify another replication slot."));
/*
* impact the users, so we used DEBUG1 level to log the message.
*/
ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1,
- errmsg("could not sync slot \"%s\" as remote slot precedes local slot",
+ errmsg("could not synchronize replication slot \"%s\" because remote slot precedes local slot",
remote_slot->name),
- errdetail("Remote slot has LSN %X/%X and catalog xmin %u, but local slot has LSN %X/%X and catalog xmin %u.",
+ errdetail("The remote slot has LSN %X/%X and catalog xmin %u, but the local slot has LSN %X/%X and catalog xmin %u.",
LSN_FORMAT_ARGS(remote_slot->restart_lsn),
remote_slot->catalog_xmin,
LSN_FORMAT_ARGS(slot->data.restart_lsn),
0, AccessShareLock);
ereport(LOG,
- errmsg("dropped replication slot \"%s\" of dbid %u",
+ errmsg("dropped replication slot \"%s\" of database with OID %u",
NameStr(local_slot->data.name),
local_slot->data.database));
}
if (!found_consistent_snapshot)
{
ereport(LOG,
- errmsg("could not sync slot \"%s\"", remote_slot->name),
- errdetail("Logical decoding cannot find consistent point from local slot's LSN %X/%X.",
+ errmsg("could not synchronize replication slot \"%s\"", remote_slot->name),
+ errdetail("Logical decoding could not find consistent point from local slot's LSN %X/%X.",
LSN_FORMAT_ARGS(slot->data.restart_lsn)));
return false;
ReplicationSlotPersist();
ereport(LOG,
- errmsg("newly created slot \"%s\" is sync-ready now",
+ errmsg("newly created replication slot \"%s\" is sync-ready now",
remote_slot->name));
return true;
*/
ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("skipping slot synchronization as the received slot sync"
+ errmsg("skipping slot synchronization because the received slot sync"
" LSN %X/%X for slot \"%s\" is ahead of the standby position %X/%X",
LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
remote_slot->name,
if (!primary_slot_valid)
ereport(ERROR,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("slot synchronization requires valid primary_slot_name"),
/* translator: second %s is a GUC variable name */
- errdetail("The replication slot \"%s\" specified by %s does not exist on the primary server.",
- PrimarySlotName, "primary_slot_name"));
+ errmsg("replication slot \"%s\" specified by \"%s\" does not exist on primary server",
+ PrimarySlotName, "primary_slot_name"));
ExecClearTuple(tupslot);
walrcv_clear_result(res);
if (dbname == NULL)
ereport(ERROR,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- /* translator: dbname is a specific option; %s is a GUC variable name */
- errmsg("slot synchronization requires dbname to be specified in %s",
- "primary_conninfo"));
+
+ /*
+ * translator: first %s is a connection option; second %s is a GUC
+ * variable name
+ */
+ errmsg("replication slot synchronization requires \"%s\" to be specified in \"%s\"",
+ "dbname", "primary_conninfo"));
return dbname;
}
if (wal_level < WAL_LEVEL_LOGICAL)
ereport(ERROR,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("slot synchronization requires \"wal_level\" >= \"logical\""));
+ errmsg("replication slot synchronization requires \"wal_level\" >= \"logical\""));
/*
* A physical replication slot(primary_slot_name) is required on the
ereport(elevel,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
/* translator: %s is a GUC variable name */
- errmsg("slot synchronization requires %s to be defined", "primary_slot_name"));
+ errmsg("replication slot synchronization requires \"%s\" to be set", "primary_slot_name"));
return false;
}
ereport(elevel,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
/* translator: %s is a GUC variable name */
- errmsg("slot synchronization requires %s to be enabled",
+ errmsg("replication slot synchronization requires \"%s\" to be enabled",
"hot_standby_feedback"));
return false;
}
ereport(elevel,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
/* translator: %s is a GUC variable name */
- errmsg("slot synchronization requires %s to be defined",
+ errmsg("replication slot synchronization requires \"%s\" to be set",
"primary_conninfo"));
return false;
}
{
ereport(LOG,
/* translator: %s is a GUC variable name */
- errmsg("slot sync worker will shutdown because %s is disabled", "sync_replication_slots"));
+ errmsg("replication slot synchronization worker will shut down because \"%s\" is disabled", "sync_replication_slots"));
proc_exit(0);
}
(old_hot_standby_feedback != hot_standby_feedback))
{
ereport(LOG,
- errmsg("slot sync worker will restart because of a parameter change"));
+ errmsg("replication slot synchronization worker will restart because of a parameter change"));
/*
* Reset the last-start time for this worker so that the postmaster
if (ShutdownRequestPending)
{
ereport(LOG,
- errmsg("slot sync worker is shutting down on receiving SIGINT"));
+ errmsg("replication slot synchronization worker is shutting down on receiving SIGINT"));
proc_exit(0);
}
if (!protocol_version_given)
ereport(ERROR,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("proto_version option missing"));
+ errmsg("option \"%s\" missing", "proto_version"));
if (!publication_names_given)
ereport(ERROR,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("publication_names option missing"));
+ errmsg("option \"%s\" missing", "publication_names"));
}
/*
ereport(ERROR,
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot drop replication slot \"%s\"", name),
- errdetail("This slot is being synced from the primary server."));
+ errdetail("This replication slot is being synchronized from the primary server."));
ReplicationSlotDropAcquired();
}
ereport(ERROR,
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("cannot alter replication slot \"%s\"", name),
- errdetail("This slot is being synced from the primary server."));
+ errdetail("This replication slot is being synchronized from the primary server."));
/*
* Do not allow users to enable failover on the standby as we do not
*/
ereport(elevel,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("replication slot \"%s\" specified in parameter %s does not exist",
+ errmsg("replication slot \"%s\" specified in parameter \"%s\" does not exist",
name, "synchronized_standby_slots"),
- errdetail("Logical replication is waiting on the standby associated with \"%s\".",
+ errdetail("Logical replication is waiting on the standby associated with replication slot \"%s\".",
name),
- errhint("Consider creating the slot \"%s\" or amend parameter %s.",
+ errhint("Create the replication slot \"%s\" or amend parameter \"%s\".",
name, "synchronized_standby_slots"));
break;
}
*/
ereport(elevel,
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("cannot have logical replication slot \"%s\" in parameter %s",
+ errmsg("cannot specify logical replication slot \"%s\" in parameter \"%s\"",
name, "synchronized_standby_slots"),
- errdetail("Logical replication is waiting for correction on \"%s\".",
+ errdetail("Logical replication is waiting for correction on replication slot \"%s\".",
name),
- errhint("Consider removing logical slot \"%s\" from parameter %s.",
+ errhint("Remove the logical replication slot \"%s\" from parameter \"%s\".",
name, "synchronized_standby_slots"));
break;
}
/* Specified physical slot has been invalidated */
ereport(elevel,
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("physical slot \"%s\" specified in parameter %s has been invalidated",
+ errmsg("physical replication slot \"%s\" specified in parameter \"%s\" has been invalidated",
name, "synchronized_standby_slots"),
- errdetail("Logical replication is waiting on the standby associated with \"%s\".",
+ errdetail("Logical replication is waiting on the standby associated with replication slot \"%s\".",
name),
- errhint("Consider dropping and recreating the slot \"%s\" or amend parameter %s.",
+ errhint("Drop and recreate the replication slot \"%s\", or amend parameter \"%s\".",
name, "synchronized_standby_slots"));
break;
}
if (inactive)
ereport(elevel,
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("replication slot \"%s\" specified in parameter %s does not have active_pid",
+ errmsg("replication slot \"%s\" specified in parameter \"%s\" does not have active_pid",
name, "synchronized_standby_slots"),
- errdetail("Logical replication is waiting on the standby associated with \"%s\".",
+ errdetail("Logical replication is waiting on the standby associated with replication slot \"%s\".",
name),
- errhint("Consider starting standby associated with \"%s\" or amend parameter %s.",
+ errhint("Start the standby associated with the replication slot \"%s\", or amend parameter \"%s\".",
name, "synchronized_standby_slots"));
/* Continue if the current slot hasn't caught up. */
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cannot merge into view \"%s\"",
RelationGetRelationName(view)),
- errdetail("MERGE is not supported for views with INSTEAD OF triggers for some actions, but not others."),
+ errdetail("MERGE is not supported for views with INSTEAD OF triggers for some actions but not all."),
errhint("To enable merging into the view, either provide a full set of INSTEAD OF triggers or drop the existing INSTEAD OF triggers."));
}
}
if (res == jperNotFound)
RETURN_ERROR(ereport(ERROR,
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
- errmsg("jsonpath item method .%s() can only be applied to a bool, string, or numeric value",
+ errmsg("jsonpath item method .%s() can only be applied to a boolean, string, or numeric value",
jspOperationName(jsp->type)))));
jb = &jbv;
case jbvBinary:
RETURN_ERROR(ereport(ERROR,
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
- errmsg("jsonpath item method .%s() can only be applied to a bool, string, numeric, or datetime value",
+ errmsg("jsonpath item method .%s() can only be applied to a boolean, string, numeric, or datetime value",
jspOperationName(jsp->type)))));
break;
}
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
errmsg("JSON path expression for column \"%s\" should return single item without wrapper",
column_name),
- errhint("Use WITH WRAPPER clause to wrap SQL/JSON items into array.")));
+ errhint("Use the WITH WRAPPER clause to wrap SQL/JSON items into an array.")));
else
ereport(ERROR,
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
errmsg("JSON path expression in JSON_QUERY should return single item without wrapper"),
- errhint("Use WITH WRAPPER clause to wrap SQL/JSON items into array.")));
+ errhint("Use the WITH WRAPPER clause to wrap SQL/JSON items into an array.")));
}
if (singleton)
{
{"sync_replication_slots", PGC_SIGHUP, REPLICATION_STANDBY,
- gettext_noop("Enables a physical standby to synchronize logical failover slots from the primary server."),
+ gettext_noop("Enables a physical standby to synchronize logical failover replication slots from the primary server."),
},
&sync_replication_slots,
false,
{
{"subtransaction_buffers", PGC_POSTMASTER, RESOURCES_MEM,
- gettext_noop("Sets the size of the dedicated buffer pool used for the sub-transaction cache."),
+ gettext_noop("Sets the size of the dedicated buffer pool used for the subtransaction cache."),
gettext_noop("Specify 0 to have this value determined as a fraction of shared_buffers."),
GUC_UNIT_BLOCKS
},
{
{"synchronized_standby_slots", PGC_SIGHUP, REPLICATION_PRIMARY,
- gettext_noop("Lists streaming replication standby server slot "
+ gettext_noop("Lists streaming replication standby server replication slot "
"names that logical WAL sender processes will wait for."),
gettext_noop("Logical WAL sender processes will send decoded "
- "changes to plugins only after the specified "
- "replication slots confirm receiving WAL."),
+ "changes to output plugins only after the specified "
+ "replication slots have confirmed receiving WAL."),
GUC_LIST_INPUT
},
&synchronized_standby_slots,
"$tempdir" . '/diff_sysid', '--incremental',
"$backupdir" . '/backup_manifest'
],
- qr/manifest system identifier is .*, but database system identifier is/,
+ qr/system identifier in backup manifest is .*, but database system identifier is/,
"pg_basebackup fails with different database system manifest");
done_testing();
system_identifier = strtou64(parse->manifest_system_identifier, &ep, 10);
if (*ep)
json_manifest_parse_failure(parse->context,
- "manifest system identifier not an integer");
+ "system identifier in manifest not an integer");
/* Invoke the callback for system identifier */
context->system_identifier_cb(context, system_identifier);
# Disable failover for enabled subscription
my ($result, $stdout, $stderr) = $subscriber1->psql('postgres',
"ALTER SUBSCRIPTION regress_mysub1 SET (failover = false)");
-ok( $stderr =~ /ERROR: cannot set failover for enabled subscription/,
+ok( $stderr =~ /ERROR: cannot set option "failover" for enabled subscription/,
"altering failover is not allowed for enabled subscription");
##################################################
# Confirm that the invalidated slot has been dropped.
$standby1->wait_for_log(
- qr/dropped replication slot "lsub1_slot" of dbid [0-9]+/, $log_offset);
+ qr/dropped replication slot "lsub1_slot" of database with OID [0-9]+/, $log_offset);
# Confirm that the logical slot has been re-created on the standby and is
# flagged as 'synced'
($result, $stdout, $stderr) =
$standby1->psql('postgres', "SELECT pg_sync_replication_slots();");
ok( $stderr =~
- /ERROR: slot synchronization requires dbname to be specified in primary_conninfo/,
+ /ERROR: replication slot synchronization requires "dbname" to be specified in "primary_conninfo"/,
"cannot sync slots if dbname is not specified in primary_conninfo");
# Add the dbname back to the primary_conninfo for further tests
# Confirm that slot sync worker acknowledge the GUC change and logs the msg
# about wrong configuration.
$standby1->wait_for_log(
- qr/slot sync worker will restart because of a parameter change/,
+ qr/slot synchronization worker will restart because of a parameter change/,
$log_offset);
$standby1->wait_for_log(
- qr/slot synchronization requires hot_standby_feedback to be enabled/,
+ qr/slot synchronization requires "hot_standby_feedback" to be enabled/,
$log_offset);
$log_offset = -s $standby1->logfile;
# Wait until the primary server logs a warning indicating that it is waiting
# for the sb1_slot to catch up.
$primary->wait_for_log(
- qr/replication slot \"sb1_slot\" specified in parameter synchronized_standby_slots does not have active_pid/,
+ qr/replication slot \"sb1_slot\" specified in parameter "synchronized_standby_slots" does not have active_pid/,
$offset);
# The regress_mysub1 was enabled for failover so it doesn't get the data from
# Wait until the primary server logs a warning indicating that it is waiting
# for the sb1_slot to catch up.
$primary->wait_for_log(
- qr/replication slot \"sb1_slot\" specified in parameter synchronized_standby_slots does not have active_pid/,
+ qr/replication slot \"sb1_slot\" specified in parameter "synchronized_standby_slots" does not have active_pid/,
$offset);
# Remove the standby from the synchronized_standby_slots list and reload the
# Wait until the primary server logs a warning indicating that it is waiting
# for the sb1_slot to catch up.
$primary->wait_for_log(
- qr/replication slot \"sb1_slot\" specified in parameter synchronized_standby_slots does not have active_pid/,
+ qr/replication slot \"sb1_slot\" specified in parameter "synchronized_standby_slots" does not have active_pid/,
$offset);
# The regress_mysub1 doesn't get the data from primary because the specified
-- want context for notices
\set SHOW_CONTEXT always
COPY check_ign_err FROM STDIN WITH (on_error ignore, log_verbosity verbose);
-NOTICE: skipping row due to data type incompatibility at line 2 for column n: "a"
+NOTICE: skipping row due to data type incompatibility at line 2 for column "n": "a"
CONTEXT: COPY check_ign_err
-NOTICE: skipping row due to data type incompatibility at line 3 for column k: "3333333333"
+NOTICE: skipping row due to data type incompatibility at line 3 for column "k": "3333333333"
CONTEXT: COPY check_ign_err
-NOTICE: skipping row due to data type incompatibility at line 4 for column m: "{a, 4}"
+NOTICE: skipping row due to data type incompatibility at line 4 for column "m": "{a, 4}"
CONTEXT: COPY check_ign_err
-NOTICE: skipping row due to data type incompatibility at line 5 for column n: ""
+NOTICE: skipping row due to data type incompatibility at line 5 for column "n": ""
CONTEXT: COPY check_ign_err
-NOTICE: skipping row due to data type incompatibility at line 7 for column m: "a"
+NOTICE: skipping row due to data type incompatibility at line 7 for column "m": "a"
CONTEXT: COPY check_ign_err
-NOTICE: skipping row due to data type incompatibility at line 8 for column k: "a"
+NOTICE: skipping row due to data type incompatibility at line 8 for column "k": "a"
CONTEXT: COPY check_ign_err
NOTICE: 6 rows were skipped due to data type incompatibility
-- tests for on_error option with log_verbosity and null constraint via domain
CREATE DOMAIN dcheck_ign_err2 varchar(15) NOT NULL;
CREATE TABLE check_ign_err2 (n int, m int[], k int, l dcheck_ign_err2);
COPY check_ign_err2 FROM STDIN WITH (on_error ignore, log_verbosity verbose);
-NOTICE: skipping row due to data type incompatibility at line 2 for column l: null input
+NOTICE: skipping row due to data type incompatibility at line 2 for column "l": null input
CONTEXT: COPY check_ign_err2
NOTICE: 1 row was skipped due to data type incompatibility
-- reset context choice
CREATE TABLE fk_partitioned_pk_6 (a int PRIMARY KEY);
CREATE TABLE fk_partitioned_fk_6 (a int REFERENCES fk_partitioned_pk_6) PARTITION BY LIST (a);
ALTER TABLE fk_partitioned_fk_6 ATTACH PARTITION fk_partitioned_pk_6 FOR VALUES IN (1);
-ERROR: can't attach table "fk_partitioned_pk_6" as a partition which is referenced by foreign key "fk_partitioned_fk_6_a_fkey"
+ERROR: cannot attach table "fk_partitioned_pk_6" as a partition because it is referenced by foreign key "fk_partitioned_fk_6_a_fkey"
DROP TABLE fk_partitioned_pk_6, fk_partitioned_fk_6;
-- This case is similar to above, but the referenced relation is one level
-- lower in the hierarchy. This one fails in a different way as the above,
-- Test .boolean()
select jsonb_path_query('null', '$.boolean()');
-ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
+ERROR: jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
select jsonb_path_query('null', '$.boolean()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.boolean()');
-ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
+ERROR: jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
select jsonb_path_query('{}', '$.boolean()');
-ERROR: jsonpath item method .boolean() can only be applied to a bool, string, or numeric value
+ERROR: jsonpath item method .boolean() can only be applied to a boolean, string, or numeric value
select jsonb_path_query('[]', 'strict $.boolean()', silent => true);
jsonb_path_query
------------------
-- Test .string()
select jsonb_path_query('null', '$.string()');
-ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
+ERROR: jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
select jsonb_path_query('null', '$.string()', silent => true);
jsonb_path_query
------------------
(0 rows)
select jsonb_path_query('[]', 'strict $.string()');
-ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
+ERROR: jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
select jsonb_path_query('{}', '$.string()');
-ERROR: jsonpath item method .string() can only be applied to a bool, string, numeric, or datetime value
+ERROR: jsonpath item method .string() can only be applied to a boolean, string, numeric, or datetime value
select jsonb_path_query('[]', 'strict $.string()', silent => true);
jsonb_path_query
------------------
-- JsonPathQuery() error message mentioning column name
SELECT * FROM JSON_TABLE('{"a": [{"b": "1"}, {"b": "2"}]}', '$' COLUMNS (b json path '$.a[*].b' ERROR ON ERROR));
ERROR: JSON path expression for column "b" should return single item without wrapper
-HINT: Use WITH WRAPPER clause to wrap SQL/JSON items into array.
+HINT: Use the WITH WRAPPER clause to wrap SQL/JSON items into an array.
-- JSON_TABLE: nested paths
-- Duplicate path names
SELECT * FROM JSON_TABLE(
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' ERROR ON ERROR);
ERROR: JSON path expression in JSON_QUERY should return single item without wrapper
-HINT: Use WITH WRAPPER clause to wrap SQL/JSON items into array.
+HINT: Use the WITH WRAPPER clause to wrap SQL/JSON items into an array.
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' DEFAULT '"empty"' ON ERROR);
json_query
------------
WHEN MATCHED THEN UPDATE SET b = s.b
WHEN NOT MATCHED AND s.a > 0 THEN INSERT VALUES (s.a, s.b); -- should fail
ERROR: cannot merge into view "rw_view2"
-DETAIL: MERGE is not supported for views with INSTEAD OF triggers for some actions, but not others.
+DETAIL: MERGE is not supported for views with INSTEAD OF triggers for some actions but not all.
HINT: To enable merging into the view, either provide a full set of INSTEAD OF triggers or drop the existing INSTEAD OF triggers.
MERGE INTO rw_view2 t
USING (SELECT x, 'R'||x FROM generate_series(0,3) x) AS s(a,b) ON t.a = s.a