Message style improvements
This commit is contained in:
parent
fdbf7e46a4
commit
f2353dd717
@ -153,14 +153,14 @@ GetNewTransactionId(bool isSubXact)
|
|||||||
if (oldest_datname)
|
if (oldest_datname)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
(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),
|
oldest_datname),
|
||||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
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.")));
|
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||||
else
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
(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),
|
oldest_datoid),
|
||||||
errhint("Execute a database-wide VACUUM in that database.\n"
|
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.")));
|
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||||
@ -175,7 +175,7 @@ GetNewTransactionId(bool isSubXact)
|
|||||||
(errmsg("database \"%s\" must be vacuumed within %u transactions",
|
(errmsg("database \"%s\" must be vacuumed within %u transactions",
|
||||||
oldest_datname,
|
oldest_datname,
|
||||||
xidWrapLimit - xid),
|
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.")));
|
"You might also need to commit or roll back old prepared transactions, or drop stale replication slots.")));
|
||||||
else
|
else
|
||||||
ereport(WARNING,
|
ereport(WARNING,
|
||||||
|
@ -646,7 +646,7 @@ AssignTransactionId(TransactionState s)
|
|||||||
if (IsInParallelMode() || IsParallelWorker())
|
if (IsInParallelMode() || IsParallelWorker())
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TRANSACTION_STATE),
|
(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
|
* Ensure parent(s) have XIDs, so that a child always has an XID later
|
||||||
|
@ -953,7 +953,7 @@ manifest_process_system_identifier(JsonManifestParseContext *context,
|
|||||||
|
|
||||||
if (manifest_system_identifier != system_identifier)
|
if (manifest_system_identifier != system_identifier)
|
||||||
context->error_cb(context,
|
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) manifest_system_identifier,
|
||||||
(unsigned long long) system_identifier);
|
(unsigned long long) system_identifier);
|
||||||
}
|
}
|
||||||
|
@ -987,7 +987,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
|
|||||||
|
|
||||||
attval = CopyLimitPrintoutLength(cstate->cur_attval);
|
attval = CopyLimitPrintoutLength(cstate->cur_attval);
|
||||||
ereport(NOTICE,
|
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,
|
(unsigned long long) cstate->cur_lineno,
|
||||||
cstate->cur_attname,
|
cstate->cur_attname,
|
||||||
attval));
|
attval));
|
||||||
@ -995,7 +995,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
ereport(NOTICE,
|
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,
|
(unsigned long long) cstate->cur_lineno,
|
||||||
cstate->cur_attname));
|
cstate->cur_attname));
|
||||||
|
|
||||||
|
@ -1230,7 +1230,7 @@ AlterSubscription(ParseState *pstate, AlterSubscriptionStmt *stmt,
|
|||||||
if (!sub->slotname)
|
if (!sub->slotname)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
(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",
|
||||||
"failover")));
|
"failover")));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -10741,7 +10741,7 @@ CloneFkReferencing(List **wqueue, Relation parentRel, Relation partRel)
|
|||||||
if (fk->confrelid == RelationGetRelid(partRel))
|
if (fk->confrelid == RelationGetRelid(partRel))
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
(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),
|
RelationGetRelationName(partRel),
|
||||||
get_constraint_name(fk->conoid))));
|
get_constraint_name(fk->conoid))));
|
||||||
|
|
||||||
|
@ -752,9 +752,11 @@ WaitForWalSummarization(XLogRecPtr lsn)
|
|||||||
current_time) / 1000;
|
current_time) / 1000;
|
||||||
ereport(WARNING,
|
ereport(WARNING,
|
||||||
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||||
errmsg("still waiting for WAL summarization through %X/%X after %ld seconds",
|
errmsg_plural("still waiting for WAL summarization through %X/%X after %ld second",
|
||||||
LSN_FORMAT_ARGS(lsn),
|
"still waiting for WAL summarization through %X/%X after %ld seconds",
|
||||||
elapsed_seconds),
|
elapsed_seconds,
|
||||||
|
LSN_FORMAT_ARGS(lsn),
|
||||||
|
elapsed_seconds),
|
||||||
errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
|
errdetail("Summarization has reached %X/%X on disk and %X/%X in memory.",
|
||||||
LSN_FORMAT_ARGS(summarized_lsn),
|
LSN_FORMAT_ARGS(summarized_lsn),
|
||||||
LSN_FORMAT_ARGS(pending_lsn))));
|
LSN_FORMAT_ARGS(pending_lsn))));
|
||||||
|
@ -539,7 +539,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
|
|||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||||
errmsg("cannot use replication slot \"%s\" for logical decoding",
|
errmsg("cannot use replication slot \"%s\" for logical decoding",
|
||||||
NameStr(slot->data.name)),
|
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."));
|
errhint("Specify another replication slot."));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -212,9 +212,9 @@ update_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid,
|
|||||||
* impact the users, so we used DEBUG1 level to log the message.
|
* impact the users, so we used DEBUG1 level to log the message.
|
||||||
*/
|
*/
|
||||||
ereport(slot->data.persistency == RS_TEMPORARY ? LOG : DEBUG1,
|
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),
|
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),
|
LSN_FORMAT_ARGS(remote_slot->restart_lsn),
|
||||||
remote_slot->catalog_xmin,
|
remote_slot->catalog_xmin,
|
||||||
LSN_FORMAT_ARGS(slot->data.restart_lsn),
|
LSN_FORMAT_ARGS(slot->data.restart_lsn),
|
||||||
@ -456,7 +456,7 @@ drop_local_obsolete_slots(List *remote_slot_list)
|
|||||||
0, AccessShareLock);
|
0, AccessShareLock);
|
||||||
|
|
||||||
ereport(LOG,
|
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),
|
NameStr(local_slot->data.name),
|
||||||
local_slot->data.database));
|
local_slot->data.database));
|
||||||
}
|
}
|
||||||
@ -576,8 +576,8 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
|
|||||||
if (!found_consistent_snapshot)
|
if (!found_consistent_snapshot)
|
||||||
{
|
{
|
||||||
ereport(LOG,
|
ereport(LOG,
|
||||||
errmsg("could not sync slot \"%s\"", remote_slot->name),
|
errmsg("could not synchronize replication slot \"%s\"", remote_slot->name),
|
||||||
errdetail("Logical decoding cannot find consistent point from local slot's LSN %X/%X.",
|
errdetail("Logical decoding could not find consistent point from local slot's LSN %X/%X.",
|
||||||
LSN_FORMAT_ARGS(slot->data.restart_lsn)));
|
LSN_FORMAT_ARGS(slot->data.restart_lsn)));
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -586,7 +586,7 @@ update_and_persist_local_synced_slot(RemoteSlot *remote_slot, Oid remote_dbid)
|
|||||||
ReplicationSlotPersist();
|
ReplicationSlotPersist();
|
||||||
|
|
||||||
ereport(LOG,
|
ereport(LOG,
|
||||||
errmsg("newly created slot \"%s\" is sync-ready now",
|
errmsg("newly created replication slot \"%s\" is sync-ready now",
|
||||||
remote_slot->name));
|
remote_slot->name));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -625,7 +625,7 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid remote_dbid)
|
|||||||
*/
|
*/
|
||||||
ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
|
ereport(AmLogicalSlotSyncWorkerProcess() ? LOG : ERROR,
|
||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
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 %X/%X for slot \"%s\" is ahead of the standby position %X/%X",
|
||||||
LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
|
LSN_FORMAT_ARGS(remote_slot->confirmed_lsn),
|
||||||
remote_slot->name,
|
remote_slot->name,
|
||||||
@ -992,10 +992,9 @@ validate_remote_info(WalReceiverConn *wrconn)
|
|||||||
if (!primary_slot_valid)
|
if (!primary_slot_valid)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
errmsg("slot synchronization requires valid primary_slot_name"),
|
|
||||||
/* translator: second %s is a GUC variable name */
|
/* translator: second %s is a GUC variable name */
|
||||||
errdetail("The replication slot \"%s\" specified by %s does not exist on the primary server.",
|
errmsg("replication slot \"%s\" specified by \"%s\" does not exist on primary server",
|
||||||
PrimarySlotName, "primary_slot_name"));
|
PrimarySlotName, "primary_slot_name"));
|
||||||
|
|
||||||
ExecClearTuple(tupslot);
|
ExecClearTuple(tupslot);
|
||||||
walrcv_clear_result(res);
|
walrcv_clear_result(res);
|
||||||
@ -1022,9 +1021,13 @@ CheckAndGetDbnameFromConninfo(void)
|
|||||||
if (dbname == NULL)
|
if (dbname == NULL)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
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;
|
return dbname;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1044,7 +1047,7 @@ ValidateSlotSyncParams(int elevel)
|
|||||||
if (wal_level < WAL_LEVEL_LOGICAL)
|
if (wal_level < WAL_LEVEL_LOGICAL)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
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
|
* A physical replication slot(primary_slot_name) is required on the
|
||||||
@ -1057,7 +1060,7 @@ ValidateSlotSyncParams(int elevel)
|
|||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
/* translator: %s is a GUC variable name */
|
/* 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1071,7 +1074,7 @@ ValidateSlotSyncParams(int elevel)
|
|||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
/* translator: %s is a GUC variable name */
|
/* 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"));
|
"hot_standby_feedback"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1085,7 +1088,7 @@ ValidateSlotSyncParams(int elevel)
|
|||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
/* translator: %s is a GUC variable name */
|
/* 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"));
|
"primary_conninfo"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1123,7 +1126,7 @@ slotsync_reread_config(void)
|
|||||||
{
|
{
|
||||||
ereport(LOG,
|
ereport(LOG,
|
||||||
/* translator: %s is a GUC variable name */
|
/* 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);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1132,7 +1135,7 @@ slotsync_reread_config(void)
|
|||||||
(old_hot_standby_feedback != hot_standby_feedback))
|
(old_hot_standby_feedback != hot_standby_feedback))
|
||||||
{
|
{
|
||||||
ereport(LOG,
|
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
|
* Reset the last-start time for this worker so that the postmaster
|
||||||
@ -1156,7 +1159,7 @@ ProcessSlotSyncInterrupts(WalReceiverConn *wrconn)
|
|||||||
if (ShutdownRequestPending)
|
if (ShutdownRequestPending)
|
||||||
{
|
{
|
||||||
ereport(LOG,
|
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);
|
proc_exit(0);
|
||||||
}
|
}
|
||||||
|
@ -404,11 +404,11 @@ parse_output_parameters(List *options, PGOutputData *data)
|
|||||||
if (!protocol_version_given)
|
if (!protocol_version_given)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
errmsg("proto_version option missing"));
|
errmsg("option \"%s\" missing", "proto_version"));
|
||||||
if (!publication_names_given)
|
if (!publication_names_given)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
errmsg("publication_names option missing"));
|
errmsg("option \"%s\" missing", "publication_names"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -795,7 +795,7 @@ ReplicationSlotDrop(const char *name, bool nowait)
|
|||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||||
errmsg("cannot drop replication slot \"%s\"", name),
|
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();
|
ReplicationSlotDropAcquired();
|
||||||
}
|
}
|
||||||
@ -826,7 +826,7 @@ ReplicationSlotAlter(const char *name, bool failover)
|
|||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
||||||
errmsg("cannot alter replication slot \"%s\"", name),
|
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
|
* Do not allow users to enable failover on the standby as we do not
|
||||||
@ -2635,11 +2635,11 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
|
|||||||
*/
|
*/
|
||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
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"),
|
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),
|
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"));
|
name, "synchronized_standby_slots"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2656,11 +2656,11 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
|
|||||||
*/
|
*/
|
||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
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"),
|
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),
|
name),
|
||||||
errhint("Consider removing logical slot \"%s\" from parameter %s.",
|
errhint("Remove the logical replication slot \"%s\" from parameter \"%s\".",
|
||||||
name, "synchronized_standby_slots"));
|
name, "synchronized_standby_slots"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2676,11 +2676,11 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
|
|||||||
/* Specified physical slot has been invalidated */
|
/* Specified physical slot has been invalidated */
|
||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
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"),
|
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),
|
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"));
|
name, "synchronized_standby_slots"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2691,11 +2691,11 @@ StandbySlotsHaveCaughtup(XLogRecPtr wait_for_lsn, int elevel)
|
|||||||
if (inactive)
|
if (inactive)
|
||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
|
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"),
|
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),
|
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"));
|
name, "synchronized_standby_slots"));
|
||||||
|
|
||||||
/* Continue if the current slot hasn't caught up. */
|
/* Continue if the current slot hasn't caught up. */
|
||||||
|
@ -3362,7 +3362,7 @@ rewriteTargetView(Query *parsetree, Relation view)
|
|||||||
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
errmsg("cannot merge into view \"%s\"",
|
errmsg("cannot merge into view \"%s\"",
|
||||||
RelationGetRelationName(view)),
|
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."));
|
errhint("To enable merging into the view, either provide a full set of INSTEAD OF triggers or drop the existing INSTEAD OF triggers."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1382,7 +1382,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
|
|||||||
if (res == jperNotFound)
|
if (res == jperNotFound)
|
||||||
RETURN_ERROR(ereport(ERROR,
|
RETURN_ERROR(ereport(ERROR,
|
||||||
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
|
(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)))));
|
jspOperationName(jsp->type)))));
|
||||||
|
|
||||||
jb = &jbv;
|
jb = &jbv;
|
||||||
@ -1663,7 +1663,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
|
|||||||
case jbvBinary:
|
case jbvBinary:
|
||||||
RETURN_ERROR(ereport(ERROR,
|
RETURN_ERROR(ereport(ERROR,
|
||||||
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
|
(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)))));
|
jspOperationName(jsp->type)))));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3984,12 +3984,12 @@ JsonPathQuery(Datum jb, JsonPath *jp, JsonWrapper wrapper, bool *empty,
|
|||||||
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
|
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
|
||||||
errmsg("JSON path expression for column \"%s\" should return single item without wrapper",
|
errmsg("JSON path expression for column \"%s\" should return single item without wrapper",
|
||||||
column_name),
|
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
|
else
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
|
(errcode(ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM),
|
||||||
errmsg("JSON path expression in JSON_QUERY should return single item without wrapper"),
|
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)
|
if (singleton)
|
||||||
|
@ -2019,7 +2019,7 @@ struct config_bool ConfigureNamesBool[] =
|
|||||||
|
|
||||||
{
|
{
|
||||||
{"sync_replication_slots", PGC_SIGHUP, REPLICATION_STANDBY,
|
{"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,
|
&sync_replication_slots,
|
||||||
false,
|
false,
|
||||||
@ -2349,7 +2349,7 @@ struct config_int ConfigureNamesInt[] =
|
|||||||
|
|
||||||
{
|
{
|
||||||
{"subtransaction_buffers", PGC_POSTMASTER, RESOURCES_MEM,
|
{"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."),
|
gettext_noop("Specify 0 to have this value determined as a fraction of shared_buffers."),
|
||||||
GUC_UNIT_BLOCKS
|
GUC_UNIT_BLOCKS
|
||||||
},
|
},
|
||||||
@ -4699,11 +4699,11 @@ struct config_string ConfigureNamesString[] =
|
|||||||
|
|
||||||
{
|
{
|
||||||
{"synchronized_standby_slots", PGC_SIGHUP, REPLICATION_PRIMARY,
|
{"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."),
|
"names that logical WAL sender processes will wait for."),
|
||||||
gettext_noop("Logical WAL sender processes will send decoded "
|
gettext_noop("Logical WAL sender processes will send decoded "
|
||||||
"changes to plugins only after the specified "
|
"changes to output plugins only after the specified "
|
||||||
"replication slots confirm receiving WAL."),
|
"replication slots have confirmed receiving WAL."),
|
||||||
GUC_LIST_INPUT
|
GUC_LIST_INPUT
|
||||||
},
|
},
|
||||||
&synchronized_standby_slots,
|
&synchronized_standby_slots,
|
||||||
|
@ -981,7 +981,7 @@ $node2->command_fails_like(
|
|||||||
"$tempdir" . '/diff_sysid', '--incremental',
|
"$tempdir" . '/diff_sysid', '--incremental',
|
||||||
"$backupdir" . '/backup_manifest'
|
"$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");
|
"pg_basebackup fails with different database system manifest");
|
||||||
|
|
||||||
done_testing();
|
done_testing();
|
||||||
|
@ -634,7 +634,7 @@ json_manifest_finalize_system_identifier(JsonManifestParseState *parse)
|
|||||||
system_identifier = strtou64(parse->manifest_system_identifier, &ep, 10);
|
system_identifier = strtou64(parse->manifest_system_identifier, &ep, 10);
|
||||||
if (*ep)
|
if (*ep)
|
||||||
json_manifest_parse_failure(parse->context,
|
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 */
|
/* Invoke the callback for system identifier */
|
||||||
context->system_identifier_cb(context, system_identifier);
|
context->system_identifier_cb(context, system_identifier);
|
||||||
|
@ -280,7 +280,7 @@ $standby1->safe_psql('postgres', "SELECT pg_sync_replication_slots();");
|
|||||||
|
|
||||||
# Confirm that the invalidated slot has been dropped.
|
# Confirm that the invalidated slot has been dropped.
|
||||||
$standby1->wait_for_log(
|
$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
|
# Confirm that the logical slot has been re-created on the standby and is
|
||||||
# flagged as 'synced'
|
# flagged as 'synced'
|
||||||
@ -335,7 +335,7 @@ $standby1->reload;
|
|||||||
($result, $stdout, $stderr) =
|
($result, $stdout, $stderr) =
|
||||||
$standby1->psql('postgres', "SELECT pg_sync_replication_slots();");
|
$standby1->psql('postgres', "SELECT pg_sync_replication_slots();");
|
||||||
ok( $stderr =~
|
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");
|
"cannot sync slots if dbname is not specified in primary_conninfo");
|
||||||
|
|
||||||
# Add the dbname back to the primary_conninfo for further tests
|
# Add the dbname back to the primary_conninfo for further tests
|
||||||
@ -526,10 +526,10 @@ $standby1->reload;
|
|||||||
# Confirm that slot sync worker acknowledge the GUC change and logs the msg
|
# Confirm that slot sync worker acknowledge the GUC change and logs the msg
|
||||||
# about wrong configuration.
|
# about wrong configuration.
|
||||||
$standby1->wait_for_log(
|
$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);
|
$log_offset);
|
||||||
$standby1->wait_for_log(
|
$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);
|
||||||
|
|
||||||
$log_offset = -s $standby1->logfile;
|
$log_offset = -s $standby1->logfile;
|
||||||
@ -678,7 +678,7 @@ is($result, 't', "subscriber2 gets data from primary");
|
|||||||
# Wait until the primary server logs a warning indicating that it is waiting
|
# Wait until the primary server logs a warning indicating that it is waiting
|
||||||
# for the sb1_slot to catch up.
|
# for the sb1_slot to catch up.
|
||||||
$primary->wait_for_log(
|
$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);
|
$offset);
|
||||||
|
|
||||||
# The regress_mysub1 was enabled for failover so it doesn't get the data from
|
# The regress_mysub1 was enabled for failover so it doesn't get the data from
|
||||||
@ -757,7 +757,7 @@ $back_q->query_until(
|
|||||||
# Wait until the primary server logs a warning indicating that it is waiting
|
# Wait until the primary server logs a warning indicating that it is waiting
|
||||||
# for the sb1_slot to catch up.
|
# for the sb1_slot to catch up.
|
||||||
$primary->wait_for_log(
|
$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);
|
$offset);
|
||||||
|
|
||||||
# Remove the standby from the synchronized_standby_slots list and reload the
|
# Remove the standby from the synchronized_standby_slots list and reload the
|
||||||
@ -798,7 +798,7 @@ $primary->safe_psql('postgres',
|
|||||||
# Wait until the primary server logs a warning indicating that it is waiting
|
# Wait until the primary server logs a warning indicating that it is waiting
|
||||||
# for the sb1_slot to catch up.
|
# for the sb1_slot to catch up.
|
||||||
$primary->wait_for_log(
|
$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);
|
$offset);
|
||||||
|
|
||||||
# The regress_mysub1 doesn't get the data from primary because the specified
|
# The regress_mysub1 doesn't get the data from primary because the specified
|
||||||
|
@ -740,24 +740,24 @@ CONTEXT: COPY check_ign_err, line 2, column n: "a"
|
|||||||
-- want context for notices
|
-- want context for notices
|
||||||
\set SHOW_CONTEXT always
|
\set SHOW_CONTEXT always
|
||||||
COPY check_ign_err FROM STDIN WITH (on_error ignore, log_verbosity verbose);
|
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
|
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
|
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
|
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
|
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
|
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
|
CONTEXT: COPY check_ign_err
|
||||||
NOTICE: 6 rows were skipped due to data type incompatibility
|
NOTICE: 6 rows were skipped due to data type incompatibility
|
||||||
-- tests for on_error option with log_verbosity and null constraint via domain
|
-- tests for on_error option with log_verbosity and null constraint via domain
|
||||||
CREATE DOMAIN dcheck_ign_err2 varchar(15) NOT NULL;
|
CREATE DOMAIN dcheck_ign_err2 varchar(15) NOT NULL;
|
||||||
CREATE TABLE check_ign_err2 (n int, m int[], k int, l dcheck_ign_err2);
|
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);
|
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
|
CONTEXT: COPY check_ign_err2
|
||||||
NOTICE: 1 row was skipped due to data type incompatibility
|
NOTICE: 1 row was skipped due to data type incompatibility
|
||||||
-- reset context choice
|
-- reset context choice
|
||||||
|
@ -1972,7 +1972,7 @@ ALTER TABLE fk_partitioned_fk ATTACH PARTITION fk_partitioned_fk_2
|
|||||||
CREATE TABLE fk_partitioned_pk_6 (a int PRIMARY KEY);
|
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);
|
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);
|
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;
|
DROP TABLE fk_partitioned_pk_6, fk_partitioned_fk_6;
|
||||||
-- This case is similar to above, but the referenced relation is one level
|
-- 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,
|
-- lower in the hierarchy. This one fails in a different way as the above,
|
||||||
|
@ -1856,7 +1856,7 @@ select jsonb_path_query('123', '$.bigint() * 2');
|
|||||||
|
|
||||||
-- Test .boolean()
|
-- Test .boolean()
|
||||||
select jsonb_path_query('null', '$.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);
|
select jsonb_path_query('null', '$.boolean()', silent => true);
|
||||||
jsonb_path_query
|
jsonb_path_query
|
||||||
------------------
|
------------------
|
||||||
@ -1868,9 +1868,9 @@ select jsonb_path_query('[]', '$.boolean()');
|
|||||||
(0 rows)
|
(0 rows)
|
||||||
|
|
||||||
select jsonb_path_query('[]', 'strict $.boolean()');
|
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()');
|
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);
|
select jsonb_path_query('[]', 'strict $.boolean()', silent => true);
|
||||||
jsonb_path_query
|
jsonb_path_query
|
||||||
------------------
|
------------------
|
||||||
@ -2518,7 +2518,7 @@ select jsonb_path_query('12.3', '$.number() * 2');
|
|||||||
|
|
||||||
-- Test .string()
|
-- Test .string()
|
||||||
select jsonb_path_query('null', '$.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);
|
select jsonb_path_query('null', '$.string()', silent => true);
|
||||||
jsonb_path_query
|
jsonb_path_query
|
||||||
------------------
|
------------------
|
||||||
@ -2530,9 +2530,9 @@ select jsonb_path_query('[]', '$.string()');
|
|||||||
(0 rows)
|
(0 rows)
|
||||||
|
|
||||||
select jsonb_path_query('[]', 'strict $.string()');
|
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()');
|
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);
|
select jsonb_path_query('[]', 'strict $.string()', silent => true);
|
||||||
jsonb_path_query
|
jsonb_path_query
|
||||||
------------------
|
------------------
|
||||||
|
@ -710,7 +710,7 @@ LINE 1: SELECT * FROM JSON_TABLE(jsonb '{"a": 123}', '$' || '.' || '...
|
|||||||
-- JsonPathQuery() error message mentioning column name
|
-- JsonPathQuery() error message mentioning column name
|
||||||
SELECT * FROM JSON_TABLE('{"a": [{"b": "1"}, {"b": "2"}]}', '$' COLUMNS (b json path '$.a[*].b' ERROR ON ERROR));
|
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
|
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
|
-- JSON_TABLE: nested paths
|
||||||
-- Duplicate path names
|
-- Duplicate path names
|
||||||
SELECT * FROM JSON_TABLE(
|
SELECT * FROM JSON_TABLE(
|
||||||
|
@ -807,7 +807,7 @@ SELECT JSON_QUERY(jsonb '[]', '$[*]' ERROR ON ERROR); -- NULL ON EMPTY
|
|||||||
|
|
||||||
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' ERROR ON ERROR);
|
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' ERROR ON ERROR);
|
||||||
ERROR: JSON path expression in JSON_QUERY should return single item without wrapper
|
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);
|
SELECT JSON_QUERY(jsonb '[1,2]', '$[*]' DEFAULT '"empty"' ON ERROR);
|
||||||
json_query
|
json_query
|
||||||
------------
|
------------
|
||||||
|
@ -1279,7 +1279,7 @@ MERGE INTO rw_view2 t
|
|||||||
WHEN MATCHED THEN UPDATE SET b = s.b
|
WHEN MATCHED THEN UPDATE SET b = s.b
|
||||||
WHEN NOT MATCHED AND s.a > 0 THEN INSERT VALUES (s.a, s.b); -- should fail
|
WHEN NOT MATCHED AND s.a > 0 THEN INSERT VALUES (s.a, s.b); -- should fail
|
||||||
ERROR: cannot merge into view "rw_view2"
|
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.
|
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
|
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
|
USING (SELECT x, 'R'||x FROM generate_series(0,3) x) AS s(a,b) ON t.a = s.a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user