Re: Problem with background worker
От | Alvaro Herrera |
---|---|
Тема | Re: Problem with background worker |
Дата | |
Msg-id | 20130320153354.GA3688@alvh.no-ip.org обсуждение исходный текст |
Ответ на | Problem with background worker (Marc Cousin <cousinmarc@gmail.com>) |
Ответы |
Re: Problem with background worker
|
Список | pgsql-hackers |
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
В списке pgsql-hackers по дате отправления: