Thread: SQL Editor hangs on COPY TO STDOUT

SQL Editor hangs on COPY TO STDOUT

From
Heikki Linnakangas
Date:
If you run something like:

copy (select * from pg_stat_activity) to stdout;

in the query editor, it will hang forever. The code in
pgQueryThread::execute() doesn't check for a PGRES_COPY_OUT result, and
calls PQgetResult() repeatedly. PQgetResult() will keep on returning
PGRES_COPY_OUT until the copy output is read with PQgetCopyData(), so it
gets stuck. COPY FROM STDOUT has a similar problem.

Attached is a patch to fix that. For COPY TO STDOUT, it prints the first
100 rows to the message display. For COPY FROM STDIN, it throws an error.

- Heikki

Attachment

Re: SQL Editor hangs on COPY TO STDOUT

From
Guillaume Lelarge
Date:
On Fri, 2012-11-09 at 15:18 +0200, Heikki Linnakangas wrote:
> If you run something like:
>
> copy (select * from pg_stat_activity) to stdout;
>
> in the query editor, it will hang forever. The code in
> pgQueryThread::execute() doesn't check for a PGRES_COPY_OUT result,
> and
> calls PQgetResult() repeatedly. PQgetResult() will keep on returning
> PGRES_COPY_OUT until the copy output is read with PQgetCopyData(), so
> it
> gets stuck. COPY FROM STDOUT has a similar problem.
>
> Attached is a patch to fix that. For COPY TO STDOUT, it prints the
> first
> 100 rows to the message display. For COPY FROM STDIN, it throws an
> error.

I finally had some time to look at your patch. It's a great fix. I
applied it to 1.16 and master.

Thanks a lot.


--
Guillaume
http://blog.guillaume.lelarge.info
http://www.dalibo.com