Re: Multiple queries in transit

Поиск
Список
Период
Сортировка
От Merlin Moncure
Тема Re: Multiple queries in transit
Дата
Msg-id CAHyXU0zuTp=du0gPhLHsKBFYwi0Wd9xxtz87N9WCDrnOE2+Vbw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Multiple queries in transit  (Merlin Moncure <mmoncure@gmail.com>)
Ответы Re: Multiple queries in transit
Список pgsql-hackers
On Mon, Oct 31, 2011 at 12:49 PM, Merlin Moncure <mmoncure@gmail.com> wrote:
> On Mon, Oct 31, 2011 at 12:09 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Heikki Linnakangas <heikki.linnakangas@enterprisedb.com> writes:
>>> On 31.10.2011 17:44, Mark Hills wrote:
>>>> Could libpq be reasonably modified to allow this?
>>
>>> I believe it's doable in theory, no-one has just gotten around to it.
>>> Patches are welcome.
>>
>> Can't you do that today with a multi-command string submitted to
>> PQsendQuery, followed by multiple calls to PQgetResult?
>
> Multi command string queries don't support parameterization.  The way
> I do it is to keep an application managed stack of data (as an array
> of record types) to send that is accumulated when the last stack is in
> transit.  Then when the last response comes in you repeat.

(offlist) in more detail, what I do here is to place action data into
a composite type and parameterize it into an array.  That array is
passed directly to a receiving query or a function if what's happening
in the server is complex.  We wrote a library for that purpose: see
here:

http://libpqtypes.esilo.com/
and especially here:
http://libpqtypes.esilo.com/man3/pqt-composites.html

so that while the connection is busy, and data is coming in from the
app, you continually PQputf() more records into the array that is
going to be shipped off to the server when the connection becomes
available.

On the query that gets to the server, it can be as simple as:
"insert into foo select unnest(%foo[])"

"select work_on_data(%foo[])"

libpqtypes sends all the data in native binary formats so is very fast.

merlin


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

Предыдущее
От: Magnus Hagander
Дата:
Сообщение: Re: Your review of pg_receivexlog/pg_basebackup
Следующее
От: Merlin Moncure
Дата:
Сообщение: Re: Multiple queries in transit