Marc Cousin escribió:
> Hi,
> 
> I'm trying to write a background writer, and I'm facing a problem with
> timestamps. The following code is where I'm having a problem (it's just a 
> demo for
> the problem):
> 
> BackgroundWorkerInitializeConnection("test", NULL);
> while (!got_sigterm)
> {
>       int ret;
>       /* Wait 1s */
>       ret = WaitLatch(&MyProc->procLatch,
>       WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH,
>       1000L);
>       ResetLatch(&MyProc->procLatch);
>       /* Insert dummy for now */
>       StartTransactionCommand();
>       SPI_connect();
>       PushActiveSnapshot(GetTransactionSnapshot());
>       ret = SPI_execute("INSERT INTO log VALUES 
> (now(),statement_timestamp(),clock_timestamp())", false, 0);
>       SPI_finish();
>       PopActiveSnapshot();
>       CommitTransactionCommand();
> }

Ah.  The reason for this problem is that the statement start time (which
also sets the transaction start time, when it's the first statement) is
set by postgres.c, not the transaction-control functions in xact.c.  So
you'd need to add a SetCurrentStatementStartTimestamp() call somewhere
in your loop.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to