Re: about client-side cursors

Поиск
Список
Период
Сортировка
От Christophe Pettus
Тема Re: about client-side cursors
Дата
Msg-id D6A97A99-3F53-43CA-A01A-B72C39C0FA84@thebuild.com
обсуждение исходный текст
Ответ на Re: about client-side cursors  (Denis Laxalde <denis.laxalde@dalibo.com>)
Ответы Re: about client-side cursors  (Denis Laxalde <denis.laxalde@dalibo.com>)
Список psycopg

> On Feb 4, 2021, at 09:21, Denis Laxalde <denis.laxalde@dalibo.com> wrote:
>
> Well, maybe I'm missing something... In the examples above, (written
> down explicitly to understand where IO happens), if I shut down postgres
> between 'await conn.execute()' and 'await cur.fetchall()', the first
> example breaks but the second doesn't. Perhaps the autocommit mention
> was misleading; it's enough to insert 'await conn.commit()' before
> 'await cur.fetchall()' to reproduce. So (and again, unless I'm missing
> something), if this is not "by design", maybe this is bug?

You're relying on private knowledge, not an API guarantee, as to "where I/O happens" here.  Like any expectation based
onprivate knowledge, you can get tripped up by that. 

We shouldn't write into the API contract that either cursor.execute() or cursor.fetch*() are guaranteed not to fail
withan I/O error.  Any time you interact with the cursor object, that can be assumed to be an asynchronous operation
thatcan fail due to the remote server not being available.  Knowing that, you can reasonably code defensively no matter
what.

Adding those explicit guarantees about I/O to the API hugely limits underlying implementation changes in the future,
foras far as I can tell no real gain. 

If it comes down to "cursor isn't a good name for this class," that's probably true, but we're a decade past making
thatdecision. 

> As far as the async interface is concerned, I think there is no adoption
> issue because there's no precedent use from psycopg2. So we could
> expose two API: cursorless querying ('await conn.execute()') and have a
> single server-side cursor class.

Right now, switching from using just a client-side cursor object to server-side cursor preserves largely preserves the
API. I think that's a valuable feature that's worth retaining. 

--
-- Christophe Pettus
   xof@thebuild.com




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

Предыдущее
От: Denis Laxalde
Дата:
Сообщение: Re: about client-side cursors
Следующее
От: Denis Laxalde
Дата:
Сообщение: Re: about client-side cursors