Re: Sharing database handles across forked child processes - Mailing list pgsql-general

From Martijn van Oosterhout
Subject Re: Sharing database handles across forked child processes
Date
Msg-id 20071113171335.GC6945@svana.org
Whole thread Raw
In response to Sharing database handles across forked child processes  (dan@sidhe.org)
Responses Re: Sharing database handles across forked child processes  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
On Tue, Nov 13, 2007 at 12:02:31PM -0500, dan@sidhe.org wrote:
> How does Postgres handle sharing database handles across child processes?
> That is, if I have a process that opens a connection to the database and
> then forks a few child processes, what happens?
>
> Can the child processes safely use the handle?

No.

> If one child closes the handle, what happens to the handle in all the
> other children? The parent?

Just closing the file descriptor is ok. Just forgetting about it is ok
too.. Best just ignore you have it open at all...

> This isn't a great thing to do, I realize, but I'm wedging database access
> into an existing heavily fork-bound perl program, so my hands are somewhat
> tied architecturally. (If it means I have to constantly test to see if the
> handle's valid, and may have to deal with a handle randomly going away on
> me, I can handle that -- I'm more worried about data corruption and
> deadlock problems here, stuff I can't reasonably catch at the application
> level)

You're going to need a seperate handle for each process. Two processes
writing to the same socket won't work. Maybe just setup a table indexed
by PID and make sure you only use your own. Or after a fork() do a
"close $dbh->getfd()" (untested).

Hope this helps,
--
Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> Those who make peaceful revolution impossible will make violent revolution inevitable.
>  -- John F Kennedy

Attachment

pgsql-general by date:

Previous
From: dan@sidhe.org
Date:
Subject: Sharing database handles across forked child processes
Next
From: Tom Lane
Date:
Subject: Re: Sharing database handles across forked child processes