BEGIN

BEGIN — iniciar un bloque de transacción

Synopsis

BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]

donde transaction_mode es uno de:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE

Descripción

BEGIN inicia un bloque de transacción, es decir, todas las instrucciones después de un comando BEGIN se ejecutarán en una única transacción hasta que se indique explícitamente un COMMIT o un ROLLBACK. Por defecto (sin BEGIN), PostgreSQL ejecuta las transacciones en modo autocommit (confirmación automática), es decir, cada instrucción se ejecuta en su propia transacción y se realiza una confirmación implícita al final de la instrucción (si la ejecución fue exitosa; de lo contrario, se realiza una reversión).

Las instrucciones se ejecutan más rápidamente en un bloque de transacción, porque el inicio/confirmación de una transacción requiere una actividad significativa de CPU y disco. La ejecución de múltiples instrucciones dentro de una transacción también es útil para garantizar la consistencia al realizar varios cambios relacionados: otras sesiones no podrán ver los estados intermedios en los que no se han realizado todas las actualizaciones relacionadas.

Si se especifica el nivel de aislamiento (isolation level), el modo lectura/escritura (read/write mode) o el modo diferible (deferrable mode), la nueva transacción tendrá esas características, como si se hubiera ejecutado SET TRANSACTION.

Parámetros

WORK
TRANSACTION

Palabras clave opcionales. No tienen ningún efecto.

Consulta SET TRANSACTION para obtener información sobre el significado de los demás parámetros de esta instrucción.

Notas

START TRANSACTION tiene la misma funcionalidad que BEGIN.

Usa COMMIT o ROLLBACK para terminar un bloque de transacción.

Ejecutar BEGIN cuando ya estás dentro de un bloque de transacción provocará un mensaje de advertencia. El estado de la transacción no se verá afectado. Para anidar transacciones dentro de un bloque de transacción, usa puntos de guardado (savepoints) (consulta SAVEPOINT).

Por razones de compatibilidad hacia atrás, se pueden omitir las comas entre transaction_modes sucesivos.

Ejemplos

Para iniciar un bloque de transacción:

BEGIN;

Compatibilidad

BEGIN es una extensión de lenguaje de PostgreSQL. Es equivalente al comando estándar SQL START TRANSACTION, cuya página de referencia contiene información de compatibilidad adicional.

El transaction_mode DEFERRABLE es una extensión de lenguaje de PostgreSQL.

Por cierto, la palabra clave BEGIN se utiliza para un propósito diferente en SQL embebido. Te aconsejamos tener cuidado con la semántica de las transacciones al portar aplicaciones de bases de datos.

Consulte también

COMMIT, ROLLBACK, START TRANSACTION, SAVEPOINT