Re: Sharing database handles across forked child processes

Поиск
Список
Период
Сортировка
От Martijn van Oosterhout
Тема Re: Sharing database handles across forked child processes
Дата
Msg-id 20071113171335.GC6945@svana.org
обсуждение исходный текст
Ответ на Sharing database handles across forked child processes  (dan@sidhe.org)
Ответы Re: Sharing database handles across forked child processes
Список 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

Вложения

В списке pgsql-general по дате отправления:

Предыдущее
От: dan@sidhe.org
Дата:
Сообщение: Sharing database handles across forked child processes
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Sharing database handles across forked child processes