> > postgres_fdw, as an example, in which cursor name get reused
> > for different queries. Notice below "c1" and "c2" is reused for different
> > queries, so now what underlying sql is FETCH, i.e. FETCH 100 FROM c1 referring
> > to? v2-0001 does not help us with the FETCH problem
> > because as I mentioned we don't have access to the underlying sql
> > ( and parsing is even too early to do a portal lookup to find the
> > underlying sql to
> > base the queryId on). What v2-0001 will do is at least group the DECLARE CURSOR
> > statements together for cursors referencing the same query and reduce the #
> > of entries.
>
> This case relies on postgres_fdw's GetCursorNumber() that assigns a
> unique number for a cursor, ensuring uniqueness per connection within
> a transaction, and the counter is reset at the end of the
> transactions. So good point for this case that this hurts. If that
> holds for the most common cases where this is seen as bloating pgss,
> that brings some solid ground, especially more for applications that
> use many cursor numbers in long-ish transactions states done under
> postgres_fdw.
Sorry for the delayed response. I’ve been thinking about this a bit, and
I agree that it’s really hard to get a good sense of the use cases out there.
postgres_fdw does have the issue of reusing cursor names, which renders
the stats essentially meaningless, in my opinion—not to mention it contributes
to excessive bloat. Looking at a driver like psycopg, explicit cursors
are supported
through the driver, but the user must define the name of the cursor,
so it's much
more controlled.
I really wonder if the right answer is to have a
pg_stat_statements.track_cursor_utility GUC that can toggle the
reporting of utility statements related to explicit cursors, while
still tracking the
underlying statements. I would even suggest making 'on' the default to
maintain the current behavior.
I don’t like that we have to introduce a new GUC for this,
but I can't think of a better alternative.
Thoughts?
--
Sami Imseih
Amazon Web Services (AWS)