Thread: Threads in PostgreSQL

Threads in PostgreSQL

From
sri harsha
Date:
Hi,

   Is it possible to use threads in Postgresql ?? I am using threads in my foreign data wrapper and i get the following error when i use the threads .

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.

No matter how much i increase the stack size , the error keeps occurring . How do i solve this problem ??


Thanks,
Harsha

Re: [HACKERS] Threads in PostgreSQL

From
Atri Sharma
Date:


On Mon, Dec 21, 2015 at 11:51 AM, sri harsha <sriharsha9992@gmail.com> wrote:
Hi,

   Is it possible to use threads in Postgresql ?? I am using threads in my foreign data wrapper and i get the following error when i use the threads .

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.



PostgreSQL is a process-per-backend model.

Can you elaborate on what you are using the threads for? 

Re: Threads in PostgreSQL

From
John R Pierce
Date:
On 12/20/2015 10:21 PM, sri harsha wrote:
>    Is it possible to use threads in Postgresql ??

multi-threading is not used anywhere in postgresql, and is not at all a
good idea.


--
john r pierce, recycling bits in santa cruz



Re: Threads in PostgreSQL

From
Chapman Flack
Date:
On 12/21/15 01:24, Atri Sharma wrote:
> On Mon, Dec 21, 2015, sri harsha <sriharsha9992@gmail.com> wrote:
>
>> I am using threads in my
>> foreign data wrapper and i get the following error when i use the threads .
>>
>> *ERROR:  stack depth limit exceeded*
>> *HINT:  Increase the configuration parameter "max_stack_depth" (currently
>> 2048kB), after ensuring the platform's stack depth limit is adequate.*

> PostgreSQL is a process-per-backend model.

To elaborate on that, it is a process per backend and most of the code
in that process has not been written for safe execution by multiple
threads. If your code starts other threads that only do other things,
but only one ever touches PostgreSQL backend code, that can be ok.
This happens in PL/Java, but it uses several interrelated precautions
to make sure no thread ever enters PostgreSQL backend code unless every
other thread is known to be out.

Even if you are taking that precaution, if the backend code is entered
by a different thread than last executed there, the stack depth tests
may be made by comparing the last thread's stack base to the current
thread's stack pointer, which will naturally give you a bogus result.
There is some API in miscadmin.h for manipulating the backend's idea
of the stack base, but there be dragons.

I am far short of the knowledgeable voices here, but in case you don't
hear from them right away, that is at least how I understand the matter.

Chapman Flack


Re: [HACKERS] Threads in PostgreSQL

From
Konstantin Knizhnik
Date:
Hi,

PostgreSQL is not using threads but it is possible to spawn thread in your PostgreSQL extensions.
For example, I have used pool of threads in my IMCS extension.
But you need to build your  extension with -pthread:

CUSTOM_COPT = -pthread

Also, please take in account that many PostgreSQL functions (even in/out or comparison functions) are not reentrant: them are storing their state in global variables.
So you will get race conditions if you are calling  such functions from multiple threads.

Concerning stack overflow, I think that the most probable reason is trivial infinite recursion.
Did you inspect stack trace in debugger?






On 21.12.2015 09:21, sri harsha wrote:
Hi,

   Is it possible to use threads in Postgresql ?? I am using threads in my foreign data wrapper and i get the following error when i use the threads .

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.

No matter how much i increase the stack size , the error keeps occurring . How do i solve this problem ??


Thanks,
Harsha