Re: Optimization for updating foreign tables in Postgres FDW - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: Optimization for updating foreign tables in Postgres FDW
Date
Msg-id CAB7nPqQguUzMMUGiCkwrcFFMt1S-9z3Cb3_MCKZRmB7tGnsGfQ@mail.gmail.com
Whole thread Raw
In response to Re: Optimization for updating foreign tables in Postgres FDW  (Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>)
Responses Re: Optimization for updating foreign tables in Postgres FDW  (Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>)
List pgsql-hackers
On Mon, Apr 4, 2016 at 7:49 PM, Etsuro Fujita
<fujita.etsuro@lab.ntt.co.jp> wrote:
> On 2016/03/31 16:38, Etsuro Fujita wrote:
>>
>> On 2016/03/31 14:07, Noah Misch wrote:
>>>
>>> On Thu, Mar 24, 2016 at 01:02:57PM +0900, Etsuro Fujita wrote:
>>>>
>>>> On 2016/03/24 11:14, Michael Paquier wrote:
>>>>>
>>>>> On Wed, Mar 23, 2016 at 10:05 PM, Thom Brown <thom@linux.com> wrote:
>>>>>>
>>>>>> I've noticed that you now can't cancel a query if there's DML pushdown
>>>>>> to a foreign server.  This previously worked while it was sending
>>>>>> individual statements as it interrupted and rolled it back.
>>>>>>
>>>>>> Here's what the local server sees when trying to cancel:
>>>>>>
>>>>>> # DELETE FROM remote.contacts;
>>>>>> ^CCancel request sent
>>>>>> DELETE 5000000
>>>>>>
>>>>>> This should probably be fixed.
>
>
>>>>> Looking at what has been committed, execute_dml_stmt is using
>>>>> PQexecParams, so we'd want to use an asynchronous call and loop on
>>>>> PQgetResult with CHECK_FOR_INTERRUPTS() in it.
>
>
>>>> Will fix.
>
>
>>> [This is a generic notification.]
>
>
>> Sorry for not having taken any action.  I've been busy with another task
>> lately, but I started working on this.  I plan to post a patch early
>> next week.
>
>
> Here is a patch to fix this issue.  As proposed by Michael, I modified
> execute_dml_stmt so that it uses PQsendQueryParams, not PQexecParams. Any
> comments are welcome.

+  * This is based on pqSocketCheck.
+  */
+ bool
+ CheckSocket(PGconn *conn)
+ {
+     int            ret;
+
+     Assert(conn != NULL);
Instead of copying again pqSocketQuery, which is as well copied in
libpqwalreceiver.c, wouldn't it be better to use WaitLatchOrSocket
with the socket returned by PQsocket?
-- 
Michael



pgsql-hackers by date:

Previous
From: Etsuro Fujita
Date:
Subject: Incorrect comment in contrib/postgres_fdw/deparse.c
Next
From: Teodor Sigaev
Date:
Subject: Re: GIN data corruption bug(s) in 9.6devel