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.
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! |