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