Fundamentos de Transacciones
9 ejemplos para empezar con transacciones de PostgreSQL: 6 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con transacciones de PostgreSQL: 6 básicos y 3 intermedios.
Tablas de ejemplo con claves foráneas para observar el comportamiento de rollback.
# Desarrollo local con Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresBEGIN inicia un bloque; COMMIT lo hace duradero.
BEGIN;
UPDATE app.accounts SET name = 'Acme Corp' WHERE id = 1;
COMMIT;ROLLBACK descarta el trabajo no confirmado.
BEGIN;
UPDATE app.accounts SET name = 'Bad' WHERE id = 1;
ROLLBACK;
SELECT name FROM app.accounts WHERE id = 1;Punto de rollback anidado.
BEGIN;
INSERT INTO app.accounts (name) VALUES ('Temp');
SAVEPOINT sp1;
UPDATE app.accounts SET name = 'Oops' WHERE name = 'Temp';
ROLLBACK TO sp1;
COMMIT;El fallo de una única sentencia en autocommit aborta solo esa sentencia.
INSERT INTO app.accounts (id, name) VALUES (1, 'dup'); -- falla si id=1 existeLa misma sesión ve los cambios confirmados.
BEGIN;
INSERT INTO app.accounts (name) VALUES ('NewCo') RETURNING id;
-- la misma TX ve la fila
COMMIT;Comprueba la FK en el momento del commit.
SET CONSTRAINTS ALL DEFERRED;
BEGIN;
-- reordena las inserciones dentro de la TX
COMMIT;Forma pseudo-código para servicios.
-- Sesión SQL
BEGIN;
-- sentencias de negocio
COMMIT;Transacciones preparadas para coordinadores externos.
PREPARE TRANSACTION 'txn_abc';
-- más tarde: COMMIT PREPARED 'txn_abc';Estado de pg_stat_activity.
SELECT pid, xact_start, state, query
FROM pg_stat_activity
WHERE state IN ('idle in transaction','active');Versiones de Stack: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, y PostGIS 3.5+.
Revisado por Chris St. John·Última actualización: 16 jul 2026