Re: Re[2]: [HACKERS] Connect from background worker thread to database

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: Alexey Vasiliev <leopard_ne(at)inbox(dot)ru>
Cc: PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Re[2]: [HACKERS] Connect from background worker thread to database
Date: 2013-11-24 23:31:49
Message-ID: CAB7nPqSeVu9vH+PMSStNN=X96Wv0MyJm_k3vLHyjFuNdnJvJrQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Nov 25, 2013 at 2:10 AM, Alexey Vasiliev <leopard_ne(at)inbox(dot)ru> wrote:
> Воскресенье, 24 ноября 2013, 14:06 +01:00 от Andres Freund
> <andres(at)anarazel(dot)de>:
>
> Hi,
>
>
> On 2013-11-24 16:27:06 +0400, Олексій Васильєв wrote:
>> This is part where I try to connect to database:
>> https://github.com/le0pard/pg_web/blob/master/src/pg_web.c#L92-L132 , but
>> SPI functions give error in log (it is commented):
>>
>> 2013-11-24 02:57:43 UTC ERROR: stack depth limit exceeded
>> 2013-11-24 02:57:43 UTC HINT: Increase the configuration parameter
>> "max_stack_depth" (currently 2048kB), after ensuring the platform's stack
>> depth limit is adequate.
>> 2013-11-24 02:57:43 UTC CONTEXT: SQL statement "SELECT COUNT(*) FROM
>> pg_class;"
>>
>> Because I doing something in wrong way. I will appreciate for any help:
>> where I doing wrong, link to the article how to do it, just a tip, pull
>> request - anything. Google search and PostgreSQL sources reading so far
>> helped me to this point.
>
> At the very least you're calling InitPostgres() instead of
> BackgroundWorkerInitializeConnection() which you have commented out. And
> the latter should only be called once in every worker.
>
> Greetings,
>
> Andres Freund
>
>
> Fixed by using PQconnectdb from "libpq-fe.h". Thanks.
You should not need an extra PQconnectdb to connect to a database
using a background worker for your case as far as I understood. By
using that you are requiring a connection to database without using
the internal infrastructure in place, meaning that your bgworker is
not connected to the database server from the inside but from the
outside, like a normal client would do. Aren't to trying to have a
background worker connected to a database when it is initialized with
BgWorkerStart_PostmasterStart? Bgworkers using this start-up mode are
not eligible to initialize database connections. Please use either
BgWorkerStart_ConsistentState or BgWorkerStart_RecoveryFinished and
BackgroundWorkerInitializeConnection will allow a connection to
database without any extra work.
--
Michael

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2013-11-25 00:42:33 Re: Traffic jams in fn_extra
Previous Message J Smith 2013-11-24 21:56:26 Re: Errors on missing pg_subtrans/ files with 9.3