Re: Última tupla insertada...

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Luis D(dot) García <ldgarc(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Última tupla insertada...
Date: 2007-01-25 20:45:59
Message-ID: 20070125204558.GM26006@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Luis D. García escribió:
> Bueno pienso que el problema en eso estaría en que necesito saber
> el valor de la que ya se insertó (T.I) durante el proceso de inserción de
> la
> nueva tupla (T.N.I), y dependiendo de los valores de esta última (en
> comparación con la T.I) el sistema decidirá si la misma ha de insertarse
> finalmente o no.
>
> Al parecer lo que tú planteas sería después de ya haberla insertado.
>
> Por otra parte, ya he podido alcanzar el HeapTuple correspondiente a la
> última tupla insertada, pero no he sabido acceder a los datos almacenados
> dentro de la misma, que es en realidad lo que necesito.
>
> Espero me puedas ayudar en esto.

Echale un vistazo a este codigo. Si le quitas el chequeo de
"typisvarlena" tambien te imprimira el valor de una columna de tipo
varlena; se lo sacamos porque generaba salida muy larga con algunas
tuplas y como es solo para debugging, molestaba.

/*
* Return a palloc'ed string corresponding to a simple-minded text version
* of the given tuple. Mainly intended for debugging logs.
*
* Caller is responsible for pfreeing it.
*/
char *
tupleToString(HeapTuple tup, TupleDesc typeinfo)
{
int natts = typeinfo->natts;
int i;
StringInfoData string;

initStringInfo(&string);

for (i = 0; i < natts; ++i)
{
Datum origattr;
char *value;
bool isnull;
Oid typoutput,
typioparam;
bool typisvarlena;

if (i > 0)
appendStringInfoString(&string, "; ");

origattr = heap_getattr(tup, i+1, typeinfo, &isnull);
if (isnull)
continue;
if (typeinfo->attrs[i]->attisdropped)
{
/* XXX: Confusing if real attribute contains text 'dropped' */
appendStringInfoString(&string, "dropped");
continue;
}
getTypeOutputInfo(typeinfo->attrs[i]->atttypid,
&typoutput, &typioparam,
&typisvarlena);

if (typisvarlena)
{
appendStringInfoString(&string, "varlena att");
}
else
{
value = DatumGetCString(OidFunctionCall3(typoutput,
origattr,
ObjectIdGetDatum(typioparam),
Int32GetDatum(typeinfo->attrs[i]->atttypmod)));
appendStringInfoString(&string, value);
pfree(value);
}
}

return string.data;
}

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-01-25 21:14:48 Re: Sitio en espaniol
Previous Message Claudio Bustos Bravo 2007-01-25 20:28:52 Re: Misma tabla ayuda!