From: | marcus(dot)boerger(at)t-online(dot)de (Marcus Brger) |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Jan Wieck <JanWieck(at)Yahoo(dot)com>, ivan <iv(at)psycho(dot)pl>, Joe Conway <mail(at)joeconway(dot)com>, Dave Page <dpage(at)vale-housing(dot)co(dot)uk>, <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: php with postgres |
Date: | 2003-07-24 20:24:52 |
Message-ID: | 268340745.20030724222452@post.rwth-aachen.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hello Bruce,
Wednesday, July 23, 2003, 6:18:13 AM, you wrote:
BM> Marcus B?rger wrote:
>> >> However it may be very usefull to terminate any open transaction before
>> >> reusing a persisten connection. Typically this happens when the same script
>> >> runs again. But anyway using transactions together with persistent conenctions
>> >> in a multithreaded environment isn't the best thing you could do. So our
>> >> options are
>> >> 1) tell the users to do 'auto commit mode'
>> >> 2) nested transactions
>> >> 3) locking
>> >>
>> >> >From my perspective 2) and 3) are bad ideas for the web environment. In other
>> >> words i guess we should leave it as is with transaction rollback only when the
>> >> client terminates (e.g. the webserver stops).
>>
>> BM> I don't see why you wouldn't just do BEGIN;COMMIT;RESET ALL; when you
>> BM> pass the connection to a new client.
>>
>>
>> Bruce you said RESET ALL is available since 7.2. I am currently checking for
>> the lib version but it would be more correct to check something on the server.
>> So the question what do i check?
BM> We usually use SELECT version().
ATM i have a patch doing the following:
Connect:
If PQprotocolVersion() is available and >= 3 PQparameterStatus() is available
then i check the server version. Else i check the lib version (*).
If the version to check is >= 7.2 ido one of the following:
- If one of PQprotocolVersion() and PQtransactionStatus() is unavailable or
protocol version < 3:
"BEGIN;COMMIT;RESET ALL;"
- If protocol version >= 3 and transaction status == PQTRANS_IDLE:
"RESET ALL;"
- If protocol version >= 3 and transaction status != PQTRANS_IDLE:
"COMMIT;RESET ALL;"
Disconnect:
- When PQprotocolVersion() And PQtransactionStatus() are available then
i check whether status is PQTRANS_IDLE. If so i do:
"ROLLBACK;"
- If the functions are not available in the client libs i do:
"BEGIN;ROLLBACK;"
Does this sound the correct behavior?
And would "select split_part(version(), ' ', 2);" be too much of a slowdown to
do the version detection in the startup sequence completely correct?
--
Best regards,
Marcus mailto:marcus(dot)boerger(at)post(dot)rwth-aachen(dot)de
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2003-07-24 20:30:14 | Re: libpq_r |
Previous Message | ivan | 2003-07-24 20:22:05 | Re: perm bug ? |