Por defecto, PostgreSQL ejecuta las transacciones en modo no encadenado (tambien conocido como "autocommit" en otros sistemas de base de datos). En otras palabras, cada estado de usuario es ejecutado en su propia transaccion y un commit se ejecuta implicitamente al final del estatuto (si la ejecucion fue exitosa, de otro modo se ejecuta un rollback). BEGIN inicia una transaccion de usuario en modo encadenado, i.e. todos los estados de usuarios despues de un comando BEGIN se ejecutaran en una transaccion unica hasta un explicito COMMIT, ROLLBACK, o aborte la ejecucion. Los estados en modo encadenado se ejecutan mucho mas rapido, porque la transaccion start/commit requiere una actividad significativa de CPU y de disco. La ejecucion de multiples estados dentro de una transaccion tambien es requerida para la consistencia cuando se cambian muchas tablas relacionadas.
El nivel de aislamiento por defecto de las transacciones en PostgreSQL es READ COMMITTED, donde las consultas dentro de la transaccion solo tiene en cuenta los cambios consolidados antes de la ejecucion de la consulta. Asi pues, debes utilizar SET TRANSACTION ISOLATION LEVEL SERIALIZABLE justo despues de BEGIN si necesitas aislamiento de transacciones mas riguroso. Las consultas del tipo SERIALIZABLE solo tendran en cuenta los cambios consolidados antes de que la transaccion entera comience (realmente, antes de la ejecucion del primer estado DML en una transaccion serializable).
Si la transaccion esta consolidada, PostgresSQL asegurara que todas las actualizaciones sean hechas o si no que ninguna de ellas lo sea. Las transacciones tienen la propiedad estandar ACID (atomica, consistente, aislada y durable).
BEGIN es una extension de lenguaje de PostgreSQL. No hay ningun comando BEGIN explicito en SQL92; la iniciacion de una transaccion siempre esta implicita y es terminado o con un estado COMMIT o con ROLLBACK.
Note: Muchos sistemas de bases de datos relacionales ofrecen una caracteristica de autocommit como una comodidad.
Por cierto, la palabra BEGIN es utilizada para diferentes propositos en SQL embebido. Queda avisado para que sea cuidadoso acerca de las transacciones semanticas cuando traslade aplicaciones de base de datos.
SQL92 tambien requiere SERIALIZABLE para ser el nivel de aislamiento de transaccion por defecto.