On Tue, Nov 13, 2007 at 12:02:31PM -0500, dan@xxxxxxxxx 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@xxxxxxxxx> http://svana.org/kleptog/ > Those who make peaceful revolution impossible will make violent revolution inevitable. > -- John F Kennedy
Attachment:
signature.asc
Description: Digital signature