Re: Pipeline mode and PQpipelineSync()

Поиск
Список
Период
Сортировка
От Boris Kolpackov
Тема Re: Pipeline mode and PQpipelineSync()
Дата
Msg-id boris.20210624103805@codesynthesis.com
обсуждение исходный текст
Ответ на Re: Pipeline mode and PQpipelineSync()  (Boris Kolpackov <boris@codesynthesis.com>)
Ответы Re: Pipeline mode and PQpipelineSync()  (Alvaro Herrera <alvaro.herrera@2ndquadrant.com>)
Re: Pipeline mode and PQpipelineSync()  (Alvaro Herrera <alvaro.herrera@2ndquadrant.com>)
Список pgsql-hackers
Boris Kolpackov <boris@codesynthesis.com> writes:

> What's strange here is that the first PQgetResult() call (marked with ???)
> returns NULL instead of result for INSERT #1 as in the first call sequence.

I've hit another similar case except now an unexpected NULL result is
returned in the middle of PGRES_PIPELINE_ABORTED result sequence. The
call sequence is as follows:

PQsendQueryPrepared() # INSERT #1
PQflush()
PQsendQueryPrepared() # INSERT #2
PQflush()
...
PQsendQueryPrepared() # INSERT #251 -- insert duplicate PK
PQflush()
...
PQsendQueryPrepared() # INSERT #343
PQflush()
PQconsumeInput()      # At this point select() indicates we can read.
PQgetResult()         # NULL -- unexpected but skipped (see prev. email)
PQgetResult()         # INSERT #1
PQgetResult()         # NULL
PQgetResult()         # INSERT #2
PQgetResult()         # NULL
...
PQgetResult()         # INSERT #251 error result, SQLSTATE 23505
PQgetResult()         # NULL
PQgetResult()         # INSERT #252 PGRES_PIPELINE_ABORTED
PQgetResult()         # NULL
PQgetResult()         # INSERT #253 PGRES_PIPELINE_ABORTED
PQgetResult()         # NULL
...
PQgetResult()         # INSERT #343 NULL (???)

Notice that result #343 corresponds to the last PQsendQueryPrepared()
call made before the socket became readable (it's not always 343 but
around there).

For completeness, the statement in question is:

INSERT INTO pgsql_bulk_object (id, idata, sdata) VALUES ($1, $2, $3)

The table:

CREATE TABLE pgsql_bulk_object (
  id BIGINT NOT NULL PRIMARY KEY,
  idata BIGINT NOT NULL,
  sdata TEXT NOT NULL);

And the data inserted is in the form:

1, 1, "1"
2, 2, "2"
...



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Greg Nancarrow
Дата:
Сообщение: Re: Added schema level support for publication.
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Add tests for UNBOUNDED syntax ambiguity