<para>
There are also additional types of conflict that can occur with Hot Standby.
These conflicts are <emphasis>hard conflicts</> in the sense that queries
- might need to be cancelled and, in some cases, sessions disconnected to resolve them.
+ might need to be canceled and, in some cases, sessions disconnected to resolve them.
The user is provided with several ways to handle these
conflicts. Conflict cases include:
<para>
Once the delay specified by <varname>max_standby_archive_delay</> or
<varname>max_standby_streaming_delay</> has been exceeded, conflicting
- queries will be cancelled. This usually results just in a cancellation
+ queries will be canceled. This usually results just in a cancellation
error, although in the case of replaying a <command>DROP DATABASE</>
the entire conflicting session will be terminated. Also, if the conflict
is over a lock held by an idle transaction, the conflicting session is
</para>
<para>
- Cancelled queries may be retried immediately (after beginning a new
+ Canceled queries may be retried immediately (after beginning a new
transaction, of course). Since query cancellation depends on
the nature of the WAL records being replayed, a query that was
- cancelled may well succeed if it is executed again.
+ canceled may well succeed if it is executed again.
</para>
<para>
Another option is to increase <xref linkend="guc-vacuum-defer-cleanup-age">
on the primary server, so that dead rows will not be cleaned up as quickly
as they normally would be. This will allow more time for queries to
- execute before they are cancelled on the standby, without having to set
+ execute before they are canceled on the standby, without having to set
a high <varname>max_standby_streaming_delay</>. However it is
difficult to guarantee any specific execution-time window with this
approach, since <varname>vacuum_defer_cleanup_age</> is measured in
<command>DROP TABLESPACE</> can only succeed if the tablespace is empty.
Some standby users may be actively using the tablespace via their
<varname>temp_tablespaces</> parameter. If there are temporary files in the
- tablespace, all active queries are cancelled to ensure that temporary
+ tablespace, all active queries are canceled to ensure that temporary
files are removed, so the tablespace can be removed and WAL replay
can continue.
</para>
read-write conflict with the insert of any tuple into that index by a
concurrent serializable transaction. If certain patterns of read-write
conflicts are detected among a set of concurrent serializable
- transactions, one of those transactions may be cancelled to protect data
+ transactions, one of those transactions may be canceled to protect data
integrity. When the flag is set, it indicates that the index access
method implements finer-grained predicate locking, which will tend to
reduce the frequency of such transaction cancellations.
</sect1>
<sect1 id="libpq-cancel">
- <title>Cancelling Queries in Progress</title>
+ <title>Canceling Queries in Progress</title>
<indexterm zone="libpq-cancel">
<primary>canceling</primary>
total disk blocks read, total buffer hits (i.e., block
read requests avoided by finding the block already in buffer cache),
number of rows returned, fetched, inserted, updated and deleted, the
- total number of queries cancelled due to conflict with recovery (on
+ total number of queries canceled due to conflict with recovery (on
standby servers), and time of last statistics reset.
</entry>
</row>
<row>
<entry><structname>pg_stat_database_conflicts</><indexterm><primary>pg_stat_database_conflicts</primary></indexterm></entry>
<entry>One row per database, showing database OID, database name and
- the number of queries that have been cancelled in this database due to
+ the number of queries that have been canceled in this database due to
dropped tablespaces, lock timeouts, old snapshots, pinned buffers and
deadlocks. Will only contain information on standby servers, since
conflicts do not occur on master servers.
<entry><literal><function>pg_stat_get_db_conflict_tablespace</function>(<type>oid</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>
- Number of queries cancelled because of recovery conflict with dropped tablespaces in database
+ Number of queries canceled because of recovery conflict with dropped tablespaces in database
</entry>
</row>
<entry><literal><function>pg_stat_get_db_conflict_lock</function>(<type>oid</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>
- Number of queries cancelled because of recovery conflict with locks in database
+ Number of queries canceled because of recovery conflict with locks in database
</entry>
</row>
<entry><literal><function>pg_stat_get_db_conflict_snapshot</function>(<type>oid</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>
- Number of queries cancelled because of recovery conflict with old snapshots in database
+ Number of queries canceled because of recovery conflict with old snapshots in database
</entry>
</row>
<entry><literal><function>pg_stat_get_db_conflict_bufferpin</function>(<type>oid</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>
- Number of queries cancelled because of recovery conflict with pinned buffers in database
+ Number of queries canceled because of recovery conflict with pinned buffers in database
</entry>
</row>
<entry><literal><function>pg_stat_get_db_conflict_startup_deadlock</function>(<type>oid</type>)</literal></entry>
<entry><type>bigint</type></entry>
<entry>
- Number of queries cancelled because of recovery conflict with deadlocks in database
+ Number of queries canceled because of recovery conflict with deadlocks in database
</entry>
</row>
</sect2>
<sect2>
- <title>Cancelling Requests in Progress</title>
+ <title>Canceling Requests in Progress</title>
<para>
During the processing of a query, the frontend might request
transaction, the transaction may block when first acquiring its snapshot,
after which it is able to run without the normal overhead of a
<literal>SERIALIZABLE</literal> transaction and without any risk of
- contributing to or being cancelled by a serialization failure. This mode
+ contributing to or being canceled by a serialization failure. This mode
is well suited for long-running reports or backups.
</para>
</refsect1>
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
<para>
While the <varname>statement_timeout</> configuration
parameter allows a query taking more than a certain amount of
- time to be cancelled, the <command>NOWAIT</> option allows a
+ time to be canceled, the <command>NOWAIT</> option allows a
query to be canceled as soon as a <command>SELECT ... FOR
UPDATE/SHARE</> command cannot immediately acquire a row lock.
</para>
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
</para>
<para>
- This fix prevents a PANIC if a <literal>VACUUM FULL</> is cancelled
+ This fix prevents a PANIC if a <literal>VACUUM FULL</> is canceled
after it's already committed its tuple movements, as well as transient
errors if a plain <literal>VACUUM</> is interrupted after having
truncated the table.
</para>
<para>
- This helps avoid cancelling long-running queries on the standby.
+ This helps avoid canceling long-running queries on the standby.
</para>
</listitem>
/*
* If we see a shutdown checkpoint while waiting for an end-of-backup
- * record, the backup was cancelled and the end-of-backup record will
+ * record, the backup was canceled and the end-of-backup record will
* never arrive.
*/
if (InArchiveRecovery &&
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
ereport(ERROR,
- (errmsg("online backup was cancelled, recovery cannot continue")));
+ (errmsg("online backup was canceled, recovery cannot continue")));
/*
* If we see a shutdown checkpoint, we know that nothing was running
(errmsg("pg_stop_backup still waiting for all required WAL segments to be archived (%d seconds elapsed)",
waits),
errhint("Check that your archive_command is executing properly. "
- "pg_stop_backup can be cancelled safely, "
+ "pg_stop_backup can be canceled safely, "
"but the database backup will not be usable without all the WAL segments.")));
}
}
if (stat(BACKUP_LABEL_FILE, &stat_buf) < 0)
return;
- /* remove leftover file from previously cancelled backup if it exists */
+ /* remove leftover file from previously canceled backup if it exists */
unlink(BACKUP_LABEL_OLD);
if (rename(BACKUP_LABEL_FILE, BACKUP_LABEL_OLD) == 0)
{
ereport(LOG,
- (errmsg("online backup mode cancelled"),
+ (errmsg("online backup mode canceled"),
errdetail("\"%s\" was renamed to \"%s\".",
BACKUP_LABEL_FILE, BACKUP_LABEL_OLD)));
}
{
ereport(WARNING,
(errcode_for_file_access(),
- errmsg("online backup mode was not cancelled"),
+ errmsg("online backup mode was not canceled"),
errdetail("Could not rename \"%s\" to \"%s\": %m.",
BACKUP_LABEL_FILE, BACKUP_LABEL_OLD)));
}
* tables separately.
*
* for_wraparound is used by autovacuum to let us know when it's forcing
- * a vacuum for wraparound, which should not be auto-cancelled.
+ * a vacuum for wraparound, which should not be auto-canceled.
*
* bstrategy is normally given as NULL, but in autovacuum it can be passed
* in to use the same buffer strategy object across multiple vacuum() calls.
* here by violating transaction semantics.)
*
* We also set the VACUUM_FOR_WRAPAROUND flag, which is passed down by
- * autovacuum; it's used to avoid cancelling a vacuum that was invoked
+ * autovacuum; it's used to avoid canceling a vacuum that was invoked
* in an emergency.
*
* Note: these flags remain set until CommitTransaction or
worker->wi_links.next = (SHM_QUEUE *) AutoVacuumShmem->av_freeWorkers;
AutoVacuumShmem->av_freeWorkers = worker;
AutoVacuumShmem->av_startingWorker = NULL;
- elog(WARNING, "worker took too long to start; cancelled");
+ elog(WARNING, "worker took too long to start; canceled");
}
}
else
pqsignal(SIGHUP, SIG_IGN);
/*
- * SIGINT is used to signal cancelling the current table's vacuum; SIGTERM
+ * SIGINT is used to signal canceling the current table's vacuum; SIGTERM
* means abort and exit cleanly, and SIGQUIT means abandon ship.
*/
pqsignal(SIGINT, StatementCancelHandler);
* intervening FORGET_RELATION_FSYNC or FORGET_DATABASE_FSYNC request, so
* we do it this way. It would be possible to be even smarter if we made
* the code below understand the specific semantics of such requests (it
- * could blow away preceding entries that would end up being cancelled
+ * could blow away preceding entries that would end up being canceled
* anyhow), but it's not clear that the extra complexity would buy us
* anything.
*/
/*
* Check called from RecoveryConflictInterrupt handler when Startup
- * process requests cancelation of all pin holders that are blocking it.
+ * process requests cancellation of all pin holders that are blocking it.
*/
bool
HoldingBufferPinThatDelaysRecovery(void)
standard meaning of "serialization failure".
* This SSI implementation makes an effort to choose the
-transaction to be cancelled such that an immediate retry of the
+transaction to be canceled such that an immediate retry of the
transaction will not fail due to conflicts with exactly the same
-transactions. Pursuant to this goal, no transaction is cancelled
+transactions. Pursuant to this goal, no transaction is canceled
until one of the other transactions in the set of conflicts which
could generate an anomaly has successfully committed. This is
conceptually similar to how write conflicts are handled. To fully
information about older committed transactions to put an upper bound
on RAM used. Beyond that limit, information spills to disk.
Performance can degrade in a pessimal situation, but it should be
-tolerable, and transactions won't need to be cancelled or blocked
+tolerable, and transactions won't need to be canceled or blocked
from starting.
* Note we read vacuumFlags without any locking. This is
* OK only for checking the PROC_IS_AUTOVACUUM flag,
* because that flag is set at process start and never
- * reset; there is logic elsewhere to avoid cancelling an
+ * reset; there is logic elsewhere to avoid canceling an
* autovacuum that is working for preventing Xid
* wraparound problems (which needs to read a different
* vacuumFlag bit), but we don't do that here to avoid
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on identification as a pivot, during conflict out checking."),
+ errdetail("Canceled on identification as a pivot, during conflict out checking."),
errhint("The transaction might succeed if retried.")));
}
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on conflict out to old pivot %u.", xid),
+ errdetail("Canceled on conflict out to old pivot %u.", xid),
errhint("The transaction might succeed if retried.")));
if (SxactHasSummaryConflictIn(MySerializableXact)
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on identification as a pivot, with conflict out to old committed transaction %u.", xid),
+ errdetail("Canceled on identification as a pivot, with conflict out to old committed transaction %u.", xid),
errhint("The transaction might succeed if retried.")));
MySerializableXact->flags |= SXACT_FLAG_SUMMARY_CONFLICT_OUT;
* We have a conflict out to a transaction which has a conflict out to a
* summarized transaction. That summarized transaction must have
* committed first, and we can't tell when it committed in relation to our
- * snapshot acquisition, so something needs to be cancelled.
+ * snapshot acquisition, so something needs to be canceled.
*/
if (SxactHasSummaryConflictOut(sxact))
{
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on conflict out to old pivot."),
+ errdetail("Canceled on conflict out to old pivot."),
errhint("The transaction might succeed if retried.")));
}
}
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on identification as a pivot, during conflict in checking."),
+ errdetail("Canceled on identification as a pivot, during conflict in checking."),
errhint("The transaction might succeed if retried.")));
/*
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on identification as a pivot, during write."),
+ errdetail("Canceled on identification as a pivot, during write."),
errhint("The transaction might succeed if retried.")));
}
else if (SxactIsPrepared(writer))
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on conflict out to pivot %u, during read.", writer->topXid),
+ errdetail("Canceled on conflict out to pivot %u, during read.", writer->topXid),
errhint("The transaction might succeed if retried.")));
}
writer->flags |= SXACT_FLAG_DOOMED;
* marked for death, because rolling back another transaction might mean
* that we flail without ever making progress. This transaction is
* committing writes, so letting it commit ensures progress. If we
- * cancelled the far conflict, it might immediately fail again on retry.
+ * canceled the far conflict, it might immediately fail again on retry.
*/
void
PreCommit_CheckForSerializationFailure(void)
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on identification as a pivot, during commit attempt."),
+ errdetail("Canceled on identification as a pivot, during commit attempt."),
errhint("The transaction might succeed if retried.")));
}
ereport(ERROR,
(errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),
errmsg("could not serialize access due to read/write dependencies among transactions"),
- errdetail("Cancelled on commit attempt with conflict in from prepared pivot."),
+ errdetail("Canceled on commit attempt with conflict in from prepared pivot."),
errhint("The transaction might succeed if retried.")));
}
nearConflict->sxactOut->flags |= SXACT_FLAG_DOOMED;
* the lock.
*
* If blocked by autovacuum, this wakeup will enable ProcSleep to send
- * the cancelling signal to the autovacuum worker.
+ * the canceling signal to the autovacuum worker.
*/
PGSemaphoreUnlock(&MyProc->sem);
}
static int UseNewLine = 0; /* Use EOF as query delimiters */
#endif /* TCOP_DONTUSENEWLINE */
-/* whether or not, and why, we were cancelled by conflict with recovery */
+/* whether or not, and why, we were canceled by conflict with recovery */
static bool RecoveryConflictPending = false;
static bool RecoveryConflictRetryable = true;
static ProcSignalReason RecoveryConflictReason;
* on next access. Meanwhile it's not any less valid than it was
* before, so any code that might expect to continue accessing it
* isn't hurt by the rebuild failure. (Consider for example a
- * subtransaction that ALTERs a table and then gets cancelled partway
+ * subtransaction that ALTERs a table and then gets canceled partway
* through the cache entry rebuild. The outer transaction should
* still see the not-modified cache entry as valid.) The worst
* consequence of an error is leaking the necessarily-unreferenced new
* so. We use write() to report to stderr because it's better to use simple
* facilities in a signal handler.
*
- * On win32, the signal cancelling happens on a separate thread, because
+ * On win32, the signal canceling happens on a separate thread, because
* that's how SetConsoleCtrlHandler works. The PQcancel function is safe
* for this (unlike PQrequestCancel). However, a CRITICAL_SECTION is required
* to protect the PGcancel structure against being changed while the signal
#ifndef WIN32
/*
- * Handle interrupt signals by cancelling the current command,
+ * Handle interrupt signals by canceling the current command,
* if it's being executed through executeMaintenanceCommand(),
* and thus has a cancelConn set.
*/
}
else if (pending_strips > 0 && *spath != '\0')
{
- /* trim a regular directory name cancelled by ".." */
+ /* trim a regular directory name canceled by ".." */
trim_directory(path);
pending_strips--;
/* foo/.. should become ".", not empty */
-- This should fail, because the two transactions have a write-skew anomaly
PREPARE TRANSACTION 'foo5';
ERROR: could not serialize access due to read/write dependencies among transactions
-DETAIL: Cancelled on commit attempt with conflict in from prepared pivot.
+DETAIL: Canceled on commit attempt with conflict in from prepared pivot.
HINT: The transaction might succeed if retried.
SELECT gid FROM pg_prepared_xacts;
gid
CREATE TABLE orderstest (
approver_ref integer,
po_ref integer,
- ordercancelled boolean
+ ordercanceled boolean
);
INSERT INTO orderstest VALUES (1, 1, false);
INSERT INTO orderstest VALUES (66, 5, false);
WHEN ord.approver_ref=1 THEN '---' ELSE 'Approved'
END) AS "Approved",
(SELECT CASE
- WHEN ord.ordercancelled
- THEN 'Cancelled'
+ WHEN ord.ordercanceled
+ THEN 'Canceled'
ELSE
(SELECT CASE
WHEN ord.po_ref=1
END)
END) AS "Status",
(CASE
- WHEN ord.ordercancelled
- THEN 'Cancelled'
+ WHEN ord.ordercanceled
+ THEN 'Canceled'
ELSE
(CASE
WHEN ord.po_ref=1
END) AS "Status_OK"
FROM orderstest ord;
SELECT * FROM orders_view;
- approver_ref | po_ref | ordercancelled | Approved | Status | Status_OK
---------------+--------+----------------+----------+-----------+-----------
- 1 | 1 | f | --- | --- | ---
- 66 | 5 | f | Approved | PO | PO
- 66 | 6 | f | Approved | PO | PO
- 66 | 7 | f | Approved | PO | PO
- 66 | 1 | t | Approved | Cancelled | Cancelled
- 66 | 8 | f | Approved | PO | PO
- 66 | 1 | f | Approved | Approved | Approved
- 77 | 1 | f | Approved | Approved | Approved
- 1 | 1 | f | --- | --- | ---
- 66 | 1 | f | Approved | Approved | Approved
- 1 | 1 | f | --- | --- | ---
+ approver_ref | po_ref | ordercanceled | Approved | Status | Status_OK
+--------------+--------+---------------+----------+----------+-----------
+ 1 | 1 | f | --- | --- | ---
+ 66 | 5 | f | Approved | PO | PO
+ 66 | 6 | f | Approved | PO | PO
+ 66 | 7 | f | Approved | PO | PO
+ 66 | 1 | t | Approved | Canceled | Canceled
+ 66 | 8 | f | Approved | PO | PO
+ 66 | 1 | f | Approved | Approved | Approved
+ 77 | 1 | f | Approved | Approved | Approved
+ 1 | 1 | f | --- | --- | ---
+ 66 | 1 | f | Approved | Approved | Approved
+ 1 | 1 | f | --- | --- | ---
(11 rows)
DROP TABLE orderstest cascade;
CREATE TABLE orderstest (
approver_ref integer,
po_ref integer,
- ordercancelled boolean
+ ordercanceled boolean
);
INSERT INTO orderstest VALUES (1, 1, false);
WHEN ord.approver_ref=1 THEN '---' ELSE 'Approved'
END) AS "Approved",
(SELECT CASE
- WHEN ord.ordercancelled
- THEN 'Cancelled'
+ WHEN ord.ordercanceled
+ THEN 'Canceled'
ELSE
(SELECT CASE
WHEN ord.po_ref=1
END)
END) AS "Status",
(CASE
- WHEN ord.ordercancelled
- THEN 'Cancelled'
+ WHEN ord.ordercanceled
+ THEN 'Canceled'
ELSE
(CASE
WHEN ord.po_ref=1