Thread: SQL Editor hangs on COPY TO STDOUT
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
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