On Thu, Jan 25, 2024 at 4:44 AM Sasmit Utkarsh <utkarshsas...@gmail.com>
wrote:

> Okay Thanks. Also please help me understand the below scenarios
>
> From the above statement, I understand is (please correct if I'm wrong
> here), When we fork a client process, each process gets its own database
> connection or transaction context.
>
So far so good


> Therefore, locks acquired in one process (or transaction) do not directly
> affect locks in another process (or transaction).
>
Not following you here. By definition, a lock impacts other processes;
that's the entire purpose.  The affect other processes in that two
processes cannot take a lock on the same thing at the same time.


> Now, I'm faced with another situation where I'm using libpq in C as client
> programs and while calling some function it acquires pg_advisory_lock for
> the request  with some identifier in transaction A. This can be thought
> of as “lock the operation with id = X”  and then make some SQL
> requests(retrieve) from the database. During that if it forks into another
> process B,
>

Client side code should not fork and preserve connections across the fork.
This is multi-threaded access to a connection, and generally speaking you
should not have 2+ threads hitting the same connection returned from
libpq.  This is undefined behavior, so that your questions below this I
suspect are moot.

merlin

>

Reply via email to