06.09.2014 Views

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

Bases de datos: Software libre - Universitat Oberta de Catalunya

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

© FUOC • 71Z799014MO 56 <strong>Bases</strong> <strong>de</strong> <strong>datos</strong> en PostgreSQL<br />

5.3. Transacciones<br />

Definimos transacción como un conjunto <strong>de</strong> operaciones que tienen significado<br />

solamente al actuar juntas.<br />

PostgreSQL ofrece soporte a transacciones, garantizando que ambas operaciones<br />

se realicen o que no se realice ninguna. Para iniciar una transacción, se utiliza<br />

el comando begin y para finalizarla, commit.<br />

<strong>de</strong>mo=# begin;<br />

BEGIN<br />

<strong>de</strong>mo=# insert into productos values (‘RAM’,’512MB’,’333 MHz’,60);<br />

INSERT 17459 1<br />

<strong>de</strong>mo=# select * from productos;<br />

parte | tipo | especificación | psugerido | clave<br />

-----------+----------+----------------+-----------+-------<br />

Procesador | 2 Ghz | 32 bits | | 1<br />

Procesador | 2.4 GHz | 32 bits | 35 | 2<br />

Procesador | 1.7 GHz | 64 bits | 205 | 3<br />

Procesador | 3 GHz | 64 bits | 560 | 4<br />

RAM | 128MB | 333 MHz | 10 | 5<br />

RAM | 256MB | 400 Mhz | 35 | 6<br />

Disco Duro | 80 GB | 7200 rpm | 60 | 7<br />

Disco Duro | 120 GB | 7200 rpm | 78 | 8<br />

Disco Duro | 200 GB | 7200 rpm | 110 | 9<br />

Disco Duro | 40 GB | 4200 rpm | | 10<br />

Monitor | 1024x876 | 75 Hz | 80 | 11<br />

Monitor | 1024x876 | 60 Hz | 67 | 12<br />

RAM | 512MB | 333 MHz | 60 | 13<br />

(13 rows)<br />

<strong>de</strong>mo=# insert into precios values (‘Patito’,13,67);<br />

INSERT 17460 1<br />

Ejemplo<br />

Una compra pue<strong>de</strong> ser una<br />

transacción que conste <strong>de</strong><br />

dos operaciones:<br />

• Insertar un registro <strong>de</strong>l pago<br />

<strong>de</strong>l producto<br />

• Insertar el producto en<br />

el inventario.<br />

No se <strong>de</strong>be insertar un producto<br />

que no se haya pagado, ni<br />

pagar un producto que no esté<br />

en el inventario, por lo tanto,<br />

las dos operaciones forman<br />

una transacción.<br />

El nuevo registro tiene como clave<br />

el 13 y, <strong>de</strong> momento, hasta que<br />

finalice la transacción, sólo pue<strong>de</strong><br />

verlo el usuario que lo ha insertado.<br />

Insertamos un registro con el precio <strong>de</strong>l proveedor Patito para el producto con<br />

clave 13.<br />

<strong>de</strong>mo=# commit;<br />

Al cerrar la transacción, los registros insertados ya son visibles para todos los<br />

usuarios. Si por alguna razón, por ejemplo una caída <strong>de</strong>l sistema, no se ejecuta<br />

el commit, la transacción se cancela. La forma explícita <strong>de</strong> cancelar una transacción<br />

es con el comando rollback.<br />

Las transacciones<br />

<strong>de</strong> PostgreSQL<br />

No hay ninguna característica<br />

en las transacciones <strong>de</strong> PostgreSQL<br />

que lo diferencien<br />

<strong>de</strong> lo que especifica el estándar.<br />

Ya hemos visto en apartados<br />

anteriores que las filas<br />

implicadas en una transacción<br />

mantienen unas columnas<br />

ocultas con información acerca<br />

<strong>de</strong> la propia transacción.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!