[fpc-devel] PostgreSQL SQLdb transactions

Mark Morgan Lloyd markMLl.fpc-devel at telemetry.co.uk
Wed Nov 5 11:03:33 CET 2014


Michael Van Canneyt wrote:
> On Tue, 4 Nov 2014, Chris Dryburgh wrote:
> 
>> Hi
>>
>> In PostgreSQL it is considered poor practice to have long running idle 
>> transactions.
>> https://encrypted.google.com/#q=postgresql+idle+in+transaction
> 
> This is a known problem, not only for postgres.
> 
> The problem is the open transaction for an open dataset: committing the 
> transaction (what you would normally do)
> will close the dataset.
> 
> The solution for which I have code in place is a flag which tells the 
> transaction that a connected dataset should not be closed when the 
> transaction is committed.
> The transaction can then be committed or rollbacked as soon as the data 
> is fetched.
> 
> I have code for this in place that works for all connection types. But 
> it still needs to be checked through the testsuite.

Sounds good. The bottom line is that the Delphi model where db controls 
hold a connection etc. open for an extended period is not a good fit on 
top of a database server which implements connection pools etc.

Another issue is that once a connection has been established to a named 
server, there's a single point of failure if it tries to reopen it but 
finds that the nameserver is unavailable. A facility to temporarily 
cache the IP address, or possibly an application-supplied list of pool 
names/addresses, would be useful.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-devel mailing list