Re: Pipeline mode and PQpipelineSync()
| От | Alvaro Herrera |
|---|---|
| Тема | Re: Pipeline mode and PQpipelineSync() |
| Дата | |
| Msg-id | 202106242232.vpewlschvxfv@alvherre.pgsql обсуждение исходный текст |
| Ответ на | Re: Pipeline mode and PQpipelineSync() (Boris Kolpackov <boris@codesynthesis.com>) |
| Ответы |
Re: Pipeline mode and PQpipelineSync()
|
| Список | pgsql-hackers |
On 2021-Jun-23, Boris Kolpackov wrote: > If, however, I execute it by checking for results before sending the > next INSERT, I get the following call sequence: > > PQsendQueryPrepared() # INSERT #1 > PQflush() > PQsendQueryPrepared() # INSERT #2 > PQflush() > ... > PQsendQueryPrepared() # INSERT #~400 > PQflush() > PQconsumeInput() # At this point select() indicates we can read. > PQgetResult() # NULL (???) > PQgetResult() # INSERT #1 > PQgetResult() # NULL > PQgetResult() # INSERT #2 > PQgetResult() # NULL IIUC the problem is that PQgetResult is indeed not prepared to deal with a result the first time until after the queue has been "prepared", and this happens on calling PQpipelineSync. But I think the formulation in the attached patch works too, and the resulting code is less surprising. I wrote a test case that works as you describe, and indeed with the original code it gets a NULL initially; that disappears with the attached patch. Can you give it a try? Thanks -- Álvaro Herrera Valdivia, Chile "Escucha y olvidarás; ve y recordarás; haz y entenderás" (Confucio)
Вложения
В списке pgsql-hackers по дате отправления: