The SET TRANSACTION statement sets the transaction priority, access mode, and "as of" timestamp after you BEGIN it but before executing the first statement that manipulates a database.
Synopsis
Required privileges
No privileges are required to set the transaction priority. However, privileges are required for each statement within a transaction.
Parameters
| Parameter | Description | 
|---|---|
| PRIORITY | If you do not want the transaction to run with NORMALpriority, you can set it toLOWorHIGH. Transactions with higher priority are less likely to need to be retried. For more information, see Transactions: Priorities.The current priority is also exposed as the read-only session variable transaction_priority.Default: NORMAL | 
| READ | Set the transaction access mode to READ ONLYorREAD WRITE. The current transaction access mode is also exposed as the session variabletransaction_read_only.Default: READ WRITE | 
| AS OF SYSTEM TIME | Execute the transaction using the database contents "as of" a specified time in the past. The AS OF SYSTEM TIMEclause can be used only when the transaction is read-only. If the transaction contains any writes, or if theREAD WRITEmode is specified, an error will be returned.For more information, see AS OF SYSTEM TIME. | 
| NOT DEFERRABLEDEFERRABLE | New in v20.2: This clause is supported for compatibility with PostgreSQL. NOT DEFERRABLEis a no-op and the default behavior for CockroachDB.DEFERRABLEreturns anunimplementederror. | 
CockroachDB now only supports SERIALIZABLE isolation, so transactions can no longer be meaningfully set to any other ISOLATION LEVEL. In previous versions of CockroachDB, you could set transactions to SNAPSHOT isolation, but that feature has been removed.
Examples
Set priority
> BEGIN;
> SET TRANSACTION PRIORITY HIGH;
> SAVEPOINT cockroach_restart;
> UPDATE products SET inventory = 0 WHERE sku = '8675309';
> INSERT INTO orders (customer, sku, status) VALUES (1001, '8675309', 'new');
> RELEASE SAVEPOINT cockroach_restart;
> COMMIT;
Use the AS OF SYSTEM TIME option
You can execute the transaction using the database contents "as of" a specified time in the past.
> BEGIN;
> SET TRANSACTION AS OF SYSTEM TIME '2019-04-09 18:02:52.0+00:00';
> SELECT * FROM orders;
> SELECT * FROM products;
> COMMIT;
Set the default transaction priority for a session
New in v20.2: To set the default transaction priority for all transactions in a session, use the default_transaction_priority session variable. For example:
> SET default_transaction_priority 'high';
> SHOW transaction_priority;
  transaction_priority
------------------------
  high
Note that transaction_priority is a read-only session variable that cannot be set directly.