---
name: "BEGIN"
section: "7"
platform: "linux"
package: "postgresql"
version: "18.6-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/BEGIN"
---

# BEGIN(7)

start a transaction block

## NAME

BEGIN - start a transaction block

## SYNOPSIS

```
BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]
where transaction_mode is one of:
    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE
```

## DESCRIPTION

**BEGIN** initiates a transaction block, that is, all statements after a **BEGIN** command will be executed in a single transaction until an explicit **COMMIT** or **ROLLBACK** is given. By default (without **BEGIN**), PostgreSQL executes transactions in “autocommit” mode, that is, each statement is executed in its own transaction and a commit is implicitly performed at the end of the statement (if execution was successful, otherwise a rollback is done).

Statements are executed more quickly in a transaction block, because transaction start/commit requires significant CPU and disk activity. Execution of multiple statements inside a transaction is also useful to ensure consistency when making several related changes: other sessions will be unable to see the intermediate states wherein not all the related updates have been done.

If the isolation level, read/write mode, or deferrable mode is specified, the new transaction has those characteristics, as if **SET TRANSACTION** was executed.

## PARAMETERS

WORK\
 TRANSACTION

Optional key words. They have no effect.

Refer to SET TRANSACTION ([**SET\_TRANSACTION**(7)](/SET_TRANSACTION/7.md)) for information on the meaning of the other parameters to this statement.

## NOTES

**START TRANSACTION** has the same functionality as **BEGIN**.

Use **COMMIT** or **ROLLBACK** to terminate a transaction block.

Issuing **BEGIN** when already inside a transaction block will provoke a warning message. The state of the transaction is not affected. To nest transactions within a transaction block, use savepoints (see [**SAVEPOINT**(7)](/SAVEPOINT/7.md)).

For reasons of backwards compatibility, the commas between successive *transaction\_modes* can be omitted.

## EXAMPLES

To begin a transaction block:

```
BEGIN;
```

## COMPATIBILITY

**BEGIN** is a PostgreSQL language extension. It is equivalent to the SQL-standard command **START TRANSACTION**, whose reference page contains additional compatibility information.

The DEFERRABLE *transaction\_mode* is a PostgreSQL language extension.

Incidentally, the BEGIN key word is used for a different purpose in embedded SQL. You are advised to be careful about the transaction semantics when porting database applications.

## SEE ALSO

[**COMMIT**(7)](/COMMIT/7.md), [**ROLLBACK**(7)](/ROLLBACK/7.md), START TRANSACTION ([**START\_TRANSACTION**(7)](/START_TRANSACTION/7.md)), [**SAVEPOINT**(7)](/SAVEPOINT/7.md)
