On Thu, November 30, 2006 03:31, Tomasz Myrta wrote:
> I used keepalive the same way as you (reconfiguring socket directly) and
> I don't remember libpq trying to reconnect itself. I think it's a
> libpqxx's behaviour - I didn't use it, but it looks like it is called
> "reactivation".
That's right. It's libpqxx, not libpq, that restores the connection. (It
couldn't really be any other way because libpq doesn't have enough
information to know it's safe--you could be in the middle of a
transaction, or you could be losing a temp table). Automatic reactivation
can also be disabled explicitly if you don't want it (or just *when* you
don't want it--e.g. when you're working with temp tables).
I do think that the long TCP timeouts are something that should be handled
at the lower levels. We can't really do real keepalives, I guess, simply
because libpq is synchronous to the application. But perhaps we could
demand that the server at least acknowledge a request in some way within a
particular time limit? It'd have to be at the lowest level possible and
as "cheap" as possible, so it doesn't break when the server is merely very
busy.
Jeroen