Re: Repeatable Read Isolation in SQL running via background worker - Mailing list pgsql-hackers

From Jeremy Finzel
Subject Re: Repeatable Read Isolation in SQL running via background worker
Date
Msg-id CAMa1XUhZ-YT_E+_ipP1ty-bADc62VLJFAagkL2hdv0cyGegzWQ@mail.gmail.com
Whole thread Raw
In response to Re: Repeatable Read Isolation in SQL running via background worker  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers


On Tue, Aug 14, 2018 at 11:18 AM, Robert Haas <robertmhaas@gmail.com> wrote:
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!
Jeremy

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Memory leak with CALL to Procedure with COMMIT.
Next
From: Shawn Debnath
Date:
Subject: Re: A slightly misleading comment in GetNewObjectId()