Subject: Copy command hangs in poll() function

From: Akshay Joshi <[email-masked]>
Date: Thu, 4 Oct 2018 11:05:19 +0530

Hello

As per documentation http://initd.org/psycopg/docs/advanced.html Copy
commands are not supported in asynchronous mode, but this will be probably
implemented in a future release. In pgAdmin4 (open source) we have used
async connection to run the SQL query on PostgreSQL database and uses
poll() function to poll the results. When user runs any *COPY *command
application hangs at poll() function.

If copy command not supported then at least it should not hang the
application. poll() function should return the proper error message.

Can you please provide that fix until support for copy command won't come.

-- 
*Akshay Joshi*

*Sr. Software Architect *

*Phone: +91 20-3058-9517Mobile: +91 976-788-8246*

---

From: Daniele Varrazzo <[email-masked]>
Date: Thu, 4 Oct 2018 11:26:11 +0100

> Can you please provide that fix until support for copy command won't come.

Uhm, I see:

    In [2]: cnn = psycopg2.connect("")
    In [3]: cur = cnn.cursor()
    In [4]: cur.execute("copy (select 1 as x) to stdout")

---------------------------------------------------------------------------
    ProgrammingError                          Traceback (most recent call
last)
    <ipython-input-4-62e3af3d121e> in <module>()
    ----> 1 cur.execute("copy (select 1 as x) to stdout")
    ProgrammingError: can't execute COPY TO: use the copy_to() method
instead

but:

    In [6]: cnn = psycopg2.connect("", async=True)
    In [7]: cnn.poll()
    Out[7]: 2
    In [8]: cnn.poll()
    Out[8]: 1
    In [9]: cnn.poll()
    Out[9]: 0

    In [12]: cur.execute("copy (select 1 as x) to stdout")
    In [14]: cnn.poll()
    ^C -- hung

So yes, I'll take a look if there is a way to detect we get in this state.
But I'm not sure it's possible, because we might not have received a result
yet that tells we are in a state not allowed (in a COPY).

Observation: maybe EnterpriseDB has resources enough to help us debugging
and fixing this issue, or maybe even implement async copy?

-- Daniele

---

From: Daniele Varrazzo <[email-masked]>
Date: Thu, 4 Oct 2018 11:29:12 +0100

> Uhm, I see:

Issue https://github.com/psycopg/psycopg2/issues/781 opened.

-- Daniele

---

From: Federico Di Gregorio <[email-masked]>
Date: Thu, 4 Oct 2018 12:33:41 +0200

On 10/04/2018 12:26 PM, Daniele Varrazzo wrote:
> On Thu, Oct 4, 2018 at 6:35 AM Akshay Joshi 
> <[email-masked] <mailto:[email-masked]>> 
> wrote:
> 
>     Hello
> 
>     As per documentation http://initd.org/psycopg/docs/advanced.html
>     <http://initd.org/psycopg/docs/advanced.html> Copy commands are not
>     supported in asynchronous mode, but this will be probably
>     implemented in a future release. In pgAdmin4 (open source) we have
>     used async connection to run the SQL query on PostgreSQL database
>     and uses poll() function to poll the results. When user runs any
>     *COPY *command application hangs at poll() function. 
> 
> 
>      ProgrammingError                          Traceback (most recent 
> call last)
> So yes, I'll take a look if there is a way to detect we get in this 
> state. But I'm not sure it's possible, because we might not have 
> received a result yet that tells we are in a state not allowed (in a COPY).
> 
> Observation: maybe EnterpriseDB has resources enough to help us 
> debugging and fixing this issue, or maybe even implement async copy?

Also, let me add that if the only way to detect the situation is by 
analyzing the query, we'll never do that.

Also, IMHO, it is perfectly fine that a sequence of operations that is 
documented as "not working" hangs - it is not something you can do by 
error: you're ignoring the documentation.

federico

-- 
Federico Di Gregorio                         [email-masked]
DNDG srl                                                  http://dndg.it
    I filosofi son come i sociologi: il mondo non lo capiscono. -- A.R.M.