Re: Transaccion ID

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transaccion ID
Date: 2005-03-07 20:47:37
Message-ID: 20050307204737.GA18743@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Mon, Mar 07, 2005 at 09:33:57PM +0100, Oswaldo Hernández wrote:

Hola,

> Gracias por tu respuesta pero preferiria una solución sin necesidad de
> hacer nada del lado del cliente.

Claro que seria mejor, pero es informacion interna que no se ha
determinado ser necesaria. En todo caso ahora que lo pienso podrias
hacer una funcion en C para obtenerlo, usando GetTopTransactionId()
(o GetCurrentTransactionId() en versiones anteriores a 8.0)

> He observado algo interesante en el comportamiento de pg_locks respecto
> a esto y estoy investigando un poquito.

Si, el Xid se registra en la tabla de locks al momento de tomar el
identificador.

alvherre=# select transaction from pg_locks where pid = pg_backend_pid() and object is null;
transaction
-------------
7143
(1 fila)

Pero nuevamente, se hace algo mas complejo cuando tienes
subtransacciones:

alvherre=# begin;
BEGIN
alvherre=# savepoint foo;
SAVEPOINT
alvherre=# create table barbaz (); -- necesario para tomar un Xid
CREATE TABLE
alvherre=# select * from pg_locks where object is null;
object | class | database | transaction | pid | mode | granted
--------+-------+----------+-------------+------+---------------+---------
| | | 7149 | 4481 | ExclusiveLock | t
| | | 7148 | 4481 | ExclusiveLock | t
(2 filas)

El menor de todos es el Xid externo (principal). Pero ojo, las tuplas
pueden quedar marcadas (xmin, xmax) con cualquiera de los dos Ids
(dependiendo de si son creadas dentro de la subtransaccion o no).
Y si la subtransaccion es abortada tienes que tener cuidado ...

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
La web junta la gente porque no importa que clase de mutante sexual seas,
tienes millones de posibles parejas. Pon "buscar gente que tengan sexo con
ciervos incendiándose", y el computador dirá "especifique el tipo de ciervo"
(Jason Alexander)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2005-03-07 20:49:36 Re: SET AUTOCOMMIT TO OFF is no longer supported
Previous Message Oswaldo Hernández 2005-03-07 20:33:57 Re: Transaccion ID