[DOC_LINK:/documentation/components/libs/postgresql.md]
[TOC]
The Transaction Query Builder provides a fluent, type-safe interface for constructing PostgreSQL transaction control statements. It supports BEGIN, COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION, and two-phase commit operations.
<?php
use function Flow\PostgreSql\DSL\begin;
$query = begin();
echo $query->toSql();
// BEGIN<?php
use function Flow\PostgreSql\DSL\begin;
use Flow\PostgreSql\QueryBuilder\Transaction\IsolationLevel;
$query = begin()
->isolationLevel(IsolationLevel::SERIALIZABLE);
echo $query->toSql();
// BEGIN ISOLATION LEVEL SERIALIZABLE<?php
use function Flow\PostgreSql\DSL\begin;
// Read-only transaction
$query = begin()
->readOnly();
echo $query->toSql();
// BEGIN READ ONLY
// Read-write transaction (explicit)
$query = begin()
->readWrite();
echo $query->toSql();
// BEGIN READ WRITEDeferrable transactions are useful for long-running read-only queries that need SERIALIZABLE isolation:
<?php
use function Flow\PostgreSql\DSL\begin;
use Flow\PostgreSql\QueryBuilder\Transaction\IsolationLevel;
$query = begin()
->isolationLevel(IsolationLevel::SERIALIZABLE)
->readOnly()
->deferrable();
echo $query->toSql();
// BEGIN ISOLATION LEVEL SERIALIZABLE, READ ONLY, DEFERRABLE<?php
use function Flow\PostgreSql\DSL\commit;
$query = commit();
echo $query->toSql();
// COMMITStart a new transaction with the same characteristics immediately after committing:
<?php
use function Flow\PostgreSql\DSL\commit;
$query = commit()
->andChain();
echo $query->toSql();
// COMMIT AND CHAIN<?php
use function Flow\PostgreSql\DSL\rollback;
$query = rollback();
echo $query->toSql();
// ROLLBACKRoll back to a specific savepoint:
<?php
use function Flow\PostgreSql\DSL\rollback;
$query = rollback()
->toSavepoint('my_savepoint');
echo $query->toSql();
// ROLLBACK TO SAVEPOINT my_savepoint<?php
use function Flow\PostgreSql\DSL\rollback;
$query = rollback()
->andChain();
echo $query->toSql();
// ROLLBACK AND CHAIN<?php
use function Flow\PostgreSql\DSL\savepoint;
$query = savepoint('my_savepoint');
echo $query->toSql();
// SAVEPOINT my_savepoint<?php
use function Flow\PostgreSql\DSL\release_savepoint;
$query = release_savepoint('my_savepoint');
echo $query->toSql();
// RELEASE my_savepoint<?php
use function Flow\PostgreSql\DSL\set_transaction;
use Flow\PostgreSql\QueryBuilder\Transaction\IsolationLevel;
$query = set_transaction()
->isolationLevel(IsolationLevel::SERIALIZABLE);
echo $query->toSql();
// SET TRANSACTION ISOLATION LEVEL SERIALIZABLE<?php
use function Flow\PostgreSql\DSL\set_transaction;
$query = set_transaction()
->readOnly();
echo $query->toSql();
// SET TRANSACTION READ ONLY<?php
use function Flow\PostgreSql\DSL\set_transaction;
use Flow\PostgreSql\QueryBuilder\Transaction\IsolationLevel;
$query = set_transaction()
->isolationLevel(IsolationLevel::SERIALIZABLE)
->readOnly()
->deferrable();
echo $query->toSql();
// SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, READ ONLY, DEFERRABLESet default transaction characteristics for the session:
<?php
use function Flow\PostgreSql\DSL\set_session_transaction;
use Flow\PostgreSql\QueryBuilder\Transaction\IsolationLevel;
$query = set_session_transaction()
->isolationLevel(IsolationLevel::SERIALIZABLE);
echo $query->toSql();
// SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLEImport a snapshot from another session (for parallel queries):
<?php
use function Flow\PostgreSql\DSL\transaction_snapshot;
$query = transaction_snapshot('00000003-0000001A-1');
echo $query->toSql();
// SET TRANSACTION SNAPSHOT '00000003-0000001A-1'Two-phase commit is useful for distributed transactions across multiple databases.
<?php
use function Flow\PostgreSql\DSL\prepare_transaction;
$query = prepare_transaction('my_transaction');
echo $query->toSql();
// PREPARE TRANSACTION 'my_transaction'<?php
use function Flow\PostgreSql\DSL\commit_prepared;
$query = commit_prepared('my_transaction');
echo $query->toSql();
// COMMIT PREPARED 'my_transaction'<?php
use function Flow\PostgreSql\DSL\rollback_prepared;
$query = rollback_prepared('my_transaction');
echo $query->toSql();
// ROLLBACK PREPARED 'my_transaction'The IsolationLevel enum provides four standard SQL isolation levels:
| Level | Description |
|---|---|
IsolationLevel::READ_UNCOMMITTED |
Allows dirty reads (treated as READ COMMITTED in PostgreSQL) |
IsolationLevel::READ_COMMITTED |
Default level. Only sees committed data |
IsolationLevel::REPEATABLE_READ |
Sees a snapshot from transaction start |
IsolationLevel::SERIALIZABLE |
Strictest level. Transactions appear to execute serially |
For a complete list of DSL functions, see the DSL reference.