On Mon, Aug 13, 2018 at 10:52 AM, Jeremy Finzel <finzelj@gmail.com> wrote: > On Thu, Aug 9, 2018 at 4:34 PM, Jeremy Finzel <finzelj@gmail.com> wrote: >> I am using worker_spi as a model to run a SQL statement inside a >> background worker. From my browsing of the Postgres library, I believe that >> if I want repeatable read isolation level, the proper way for me to attain >> this is to add this line after StartTransactionCommand() in worker_spi_main: >> >> XactIsoLevel = XACT_REPEATABLE_READ;
It's usually a good idea to only change GUCs through the GUC machinery i.e. use SetConfigOption().
Are you using StartTransactionCommand() and CommitTransactionCommand() to manage transaction boundaries? If not, maybe you should.
Many thanks for the reply. Yes, I am using StartTransactionCommand and Commit just like in worker_spi.c. Here is the relevant section of code:
SetCurrentStatementStartTimestamp();
StartTransactionCommand();
XactIsoLevel = XACT_REPEATABLE_READ;
SPI_connect();
PushActiveSnapshot(GetTransactionSnapshot());
pgstat_report_activity(STATE_RUNNING, buf.data);
/* We can now execute queries via SPI */
SPI_execute(buf.data, false, 0);
/*
* And finish our transaction.
*/
SPI_finish();
PopActiveSnapshot();
CommitTransactionCommand();
So if you are saying it would be better to use SetConfigOption() there I will look into that. Thanks!