5.3. Transacciones

Ejemplo
Una compra puede ser una transacción que conste de dos operaciones:
•   Insertar un registro del pago del producto
•   Insertar el producto en el inventario.
No se debe insertar un producto que no se haya pagado, ni pagar un producto que no esté en el inventario, por lo tanto, las dos operaciones forman una transacción.

Definimos transacción como un conjunto de operaciones que tienen significado solamente al actuar juntas.

PostgreSQL ofrece soporte a transacciones, garantizando que ambas operaciones se realicen o que no se realice ninguna. Para iniciar una transacción, se utiliza el comando begin y para finalizarla, commit.



demo=# begin; BEGIN demo=# insert into productos values (`RAM´,`512MB´,`333 MHz´,60); INSERT 17459 1 demo=# select * from productos; parte | tipo | especificación | psugerido | clave -----------+----------+----------------+-----------+------- Procesador | 2 Ghz | 32 bits | | 1 Procesador | 2.4Ghz | 32 bits | 35 | 2 Procesador | 1.7 Ghz | 64 bits | 205 | 3 Procesador | 3 GHz | 64 bits | 560 | 4 RAM | 128MB | 333 MHz | 10 | 5 RAM | 256MB | 400 Mhz | 35 | 6 Dico Duro | 80 GB | 7200 rpm | 60 | 7 Disco Duro | 120 GB | 7200 rpm | 78 | 8 Disco Duro | 200 GB | 7200 rpm | 110 | 9 Disco Duro | 40 GB | 4200 rpm | | 10 Monitor | 1024x876 | 75 Hz | 80 | 11 Monitor | 1024x876 | 60 Hzs | 67 | 12 RAM | 512 MB | 333 MHz | 60 | 13 (13 rows) demo=# insert into precios values (`Patito´,13,67); INSERT 17460 1

El nuevo registro tiene como clave el 13 y, de momento, hasta que finalice la transacción, sólo puede verlo el usuario que lo ha insertado.

 

Insertamos un registro con el precio del proveedor Patito para el producto con clave 13.



demo=# commit;



Al cerrar la transacción, los registros insertados ya son visibles para todos los usuarios. Si por alguna razón, por ejemplo una caída del sistema, no se ejecuta el commit, la transacción se cancela. La forma explícita de cancelar una transacción es con el comando rollback.