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: Sumar TIMESTAMP + TIME desde el código fuente |
Date: | 2007-03-18 00:19:57 |
Message-ID: | 20070318001957.GB12620@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Luis D. García escribió:
> Que tal, les escribo en esta ocasión debido a que necesito hacer una
> validación
> de los datos entrantes (VALUES... en el INSERT-Stmt) la cual se basa en la
> suma de un dato TIMESTAMP y uno de tipo TIME.
Justo por estos dias escribi este trozo de codigo para las mejoras de
autovacuum. Aca la formula que se esta ejecutando es
'1 second' * (1.0 * autovacuum_naptime) + now
donde autovacuum_naptime es un tiempo en segundos y now es un TimestampTz.
now = GetCurrentTimestamp();
if (avdb->ad_datid == dbid)
{
Datum onesec;
Datum naptime_secs;
/*
* add autovacuum_naptime seconds to the current time,
* and use that as the new "next_worker" field for this
* database.
* XXX is there a cleaner way to add a number of seconds
* to a TimestampTz?
*/
onesec = DirectFunctionCall3(interval_in,
CStringGetDatum("1 second"),
ObjectIdGetDatum(InvalidOid),
Int32GetDatum(-1));
naptime_secs =
DirectFunctionCall2(interval_mul,
onesec,
Float8GetDatum(1.0 * autovacuum_naptime));
avdb->ad_next_worker =
DatumGetTimestampTz(DirectFunctionCall2(timestamptz_pl_interval,
TimestampTzGetDatum(now),
naptime_secs));
pfree(DatumGetPointer(onesec));
pfree(DatumGetPointer(naptime_secs));
DLMoveToFront(elem);
break;
}
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Julio Cesar Sánchez González | 2007-03-18 07:27:58 | Re: Mostrar caracteres acentuados en PHP |
Previous Message | Alvaro Herrera | 2007-03-18 00:15:47 | Re: manual d psql |