Обсуждение: Background Processes in Postgres Extension

Поиск
Список
Период
Сортировка

Background Processes in Postgres Extension

От
Sushrut Shivaswamy
Дата:
Hey,

I'm developing a postgres extension as a custom Table Interface method definition.
WIthin the extension, I"m planning to create two background processes using `fork()` that will process data in the background.

Are there any recommendations / guidelines around creating background  processes within extensions in postgres?

Thanks,
Sushrut


Re: Background Processes in Postgres Extension

От
Tom Lane
Дата:
Sushrut Shivaswamy <sushrut.shivaswamy@gmail.com> writes:
> I'm developing a postgres extension as a custom Table Interface method
> definition.
> WIthin the extension, I"m planning to create two background processes using
> `fork()` that will process data in the background.

> Are there any recommendations / guidelines around creating background
> processes within extensions in postgres?

fork() is entirely the wrong way to do it, mainly because when the
creating session exits the postmaster will be unaware of those
now-disconnected child processes.  See the mechanisms for creating
background worker processes (start with bgworker.h).

            regards, tom lane



Re: Background Processes in Postgres Extension

От
Sushrut Shivaswamy
Дата:
Thanks for the suggestion on using postgres background worker.

I tried creating one following the implementation in worker_spi and am able to spawn a background worker successfully.

However, the background worker seems to cause postmaster to crash when I wait for it to finish using `WaitForBackgroundWorkerShutdown.
The function called by the background worker is empty except for logging a message to disk.

Any ideas on what could be going wrong / tips for debugging?

Thanks,
Sushrut 


Re: Background Processes in Postgres Extension

От
Ashutosh Bapat
Дата:


On Sat, Apr 27, 2024 at 9:26 PM Sushrut Shivaswamy <sushrut.shivaswamy@gmail.com> wrote:
Thanks for the suggestion on using postgres background worker.

I tried creating one following the implementation in worker_spi and am able to spawn a background worker successfully.

However, the background worker seems to cause postmaster to crash when I wait for it to finish using `WaitForBackgroundWorkerShutdown.
The function called by the background worker is empty except for logging a message to disk.

When debugging a crash, backtrace from core dump is useful. if you can reproduce the crash, running reproduction with gdb attached to a process intended to crash is more useful.

--
Best Wishes,
Ashutosh Bapat