Search Postgresql Archives

Re: Sharing database handles across forked child processes

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

 



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


[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