---
name: "set_transaction"
section: "7l"
platform: "linux"
package: "postgresql"
version: "7.2.1-2woody8"
release: "Debian 3.0 (Woody)"
platforms: ["linux"]
url: "https://new.carta.tech/set_transaction/7l"
---

# set\_transaction(7l)

set the characteristics of the current transaction

## NAME

SET TRANSACTION - set the characteristics of the current transaction

## SYNOPSIS

```
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL
    { READ COMMITTED | SERIALIZABLE }

```

## DESCRIPTION

This command sets the transaction isolation level. The **SET TRANSACTION** command sets the characteristics for the current SQL-transaction. It has no effect on any subsequent transactions. This command cannot be used after the first query or data-modification statement (**SELECT**, **INSERT**, **DELETE**, **UPDATE**, **FETCH**, **COPY**) of a transaction has been executed. **SET SESSION CHARACTERISTICS** sets the default transaction isolation level for each transaction for a session. **SET TRANSACTION** can override it for an individual transaction.

The isolation level of a transaction determines what data the transaction can see when other transactions are running concurrently.

- **READ COMMITTED**

  A statement can only see rows committed before it began. This is the default.

- **SERIALIZABLE**

  The current transaction can only see rows committed before first query or data-modification statement was executed in this transaction.

  **Tip:** Intuitively, serializable means that two concurrent transactions will leave the database in the same state as if the two has been executed strictly after one another in either order.

## NOTES

The session default transaction isolation level can also be set with the command

```
SET default_transaction_isolation = 'value'

```

and in the configuration file. Consult the *Administrator's* *Guide* for more information.

## COMPATIBILITY

### SQL92, SQL99

SERIALIZABLE is the default level in SQL. PostgreSQL does not provide the isolation levels **READ UNCOMMITTED**  and **REPEATABLE READ**. Because of multiversion concurrency control, the serializable level is not truly serializable. See the *User's Guide* for details.

In SQL there are two other transaction characteristics that can be set with these commands: whether the transaction is read-only and the size of the diagnostics area. Neither of these concepts are supported in PostgreSQL.
