Re: Is ECPG's SET CONNECTION really not thread-aware?

From: "Tsunakawa, Takayuki" <tsunakawa(dot)takay(at)jp(dot)fujitsu(dot)com>
To: "Michael Meskes (meskes(at)postgresql(dot)org)" <meskes(at)postgresql(dot)org>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Is ECPG's SET CONNECTION really not thread-aware?
Date: 2017-06-06 00:14:23
Message-ID: 0A3221C70F24FB45833433255569204D1F71F40F@G01JPEXMBYT05
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

From: pgsql-hackers-owner(at)postgresql(dot)org
> [mailto:pgsql-hackers-owner(at)postgresql(dot)org] On Behalf Of Tsunakawa,
> Takayuki
> The following page says:
>
> https://www.postgresql.org/docs/devel/static/ecpg-connect.html#ecpg-se
> t-connection
>
> --------------------------------------------------
> EXEC SQL AT connection-name SELECT ...;
>
> If your application uses multiple threads of execution, they cannot share
> a connection concurrently. You must either explicitly control access to
> the connection (using mutexes) or use a connection for each thread. If each
> thread uses its own connection, you will need to use the AT clause to specify
> which connection the thread will use.
>
> EXEC SQL SET CONNECTION connection-name;
>
> ...It is not thread-aware.
> --------------------------------------------------
>
>
> What does this mean by "not thread-aware?" Does SET CONNECTION in one
> thread change the current connection in another thread?
> It doesn't look so, because the connection management and SQL execution
> in ECPG uses thread-specific data (TSD) to get and set the current connection,
> like this:

The ECPG code sets and gets the current connection to/from the TSD, so SET CONNECTION is thread-aware. I could confirm that like this:

threadA: CONNECT AS conA
threadB: CONNECT AS conB
threadA: CONNECT AS conC
threadA & threadB: SELECT pg_backend_pid() ... each thread displays different pids
threadA: SET CONNECTION conA
threadA & threadB: SELECT pg_backend_pid() ... each thread displays different pids, with thread outputting the same pid as before

So the doc seems to need fix. The patch is attached.

Regards
Takayuki Tsunakawa

Attachment Content-Type Size
ecpg_setconn.patch application/octet-stream 1.0 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2017-06-06 00:45:04 Re: Make ANALYZE more selective about what is a "most common value"?
Previous Message Thomas Munro 2017-06-05 22:57:57 Re: PG10 transition tables, wCTEs and multiple operations on the same table