Search Postgresql Archives

Re: auto-reconnect: temp schemas, sequences, transactions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 04 May 2011 18:04:16 Tom Lane wrote:
> Marek Wieckowski <wieckom@xxxxxxx> writes:
> > If there is a script executed in psql there is no easy way to catch that
> > psql has reconnected in the middle of it...
> 
> As far as psql goes, it should certainly abandon executing any script
> file if it loses the connection.  I rather thought it did already.
> See the bit just above where you propose patching:
> 
> 		if (!pset.cur_cmd_interactive)
> 		{
> 			psql_error("connection to server was lost\n");
> 			exit(EXIT_BADCONN);
> 		}

Hmm, indeed, I've missed it. Clear for psql. And yes, I agree that for psql it 
is better to exit. Thanks for the answer.

But for the library which I'm using, simply exiting/aborting is not an option 
(and this is why I was looking into this in the first place). There is a 
danger that client programs will continue issuing queries while believing that 
they are in a transaction... They do expect db errors and rolled back 
transactions, but not that their begin-commit section would be executed only 
partially. Solving this on the level of "my" library would solve it once for 
good (and the alternative sounds more complex: it would require exposing extra 
info to the programs using this library, and add handling of reconnect 
situation in each of these programs etc.).

In my head, it wraps up to a following structure: In the library (which gives 
access to libpq functionality):
1. anytime we use db connection we would check if connection is OK;
2. if yes, we would ask for PQtransactionStatus() and keep a copy of returned 
status;
3. if not, we would try to reconnect, BUT based on (2.) we would know if 
before the connection was lost we were in a trans;
4. if we were in a trans before disconnect, then immediately after 
reconnecting we would create a trans-in-error.

Does the above make sense to you? Any points of attention?


Also, would you have any suggestion for how to create a trans-in-error in a 
way nicer than  
  	begin;
  	select 1/0;
preferably with a message? In other words, is there some libpq equivalent of 
"raise exception"?

Best,
~Marek

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux