Re: BUG #17552: pg_stat_statements tracks internal FK check queries when COPY used to load data
От | Julien Rouhaud |
---|---|
Тема | Re: BUG #17552: pg_stat_statements tracks internal FK check queries when COPY used to load data |
Дата | |
Msg-id | 20220718101955.5erjttxbbjupm2xr@jrouhaud обсуждение исходный текст |
Ответ на | BUG #17552: pg_stat_statements tracks internal FK check queries when COPY used to load data (PG Bug reporting form <noreply@postgresql.org>) |
Ответы |
Re: BUG #17552: pg_stat_statements tracks internal FK check queries when COPY used to load data
|
Список | pgsql-bugs |
Hi, On Sun, Jul 17, 2022 at 07:23:36PM +0000, PG Bug reporting form wrote: > > Bug reference: 17552 > Logged by: Maxim Boguk > Email address: maxim.boguk@gmail.com > PostgreSQL version: 14.4 > Operating system: Linux > Description: > > pg_stat_statements track internal FK trigger check queries during data load > via COPY > ( pg_stat_statements.track=top (default) and > pg_stat_statements.track_utility=off (not default) ) > Tested on latest 13 and 14 versions. Reproduced on current master too. > Test script (test.sql): > [...] > select query, calls from public.pg_stat_statements where dbid=(select oid > from pg_database where datname=current_database()) order by calls desc limit > 2; > > run: > psql -e -f test.sql -d sometestdb > > Final output rows: > select query, calls from public.pg_stat_statements where dbid=(select oid > from pg_database where datname=current_database()) order by calls desc limit > 2; > query > | calls > ---------------------------------------------------------------------------------------------+------- > SELECT $2 FROM ONLY "public"."t1" x WHERE "id" OPERATOR(pg_catalog.=) $1 > FOR KEY SHARE OF x | 100 > select pg_stat_statements_reset() > | 1 > (2 rows) > > > Expected output: > query > | calls > ---------------------------------------------------------------------------------------------+------- > select pg_stat_statements_reset() > | 1 > (1 rows) I agree with you that the current behavior seems wrong. If we ignore a utility statement, it doesn't mean that any standard query executed underneath should become a top-level statement as it's the case now. I see that there's an existing test that actually relies on that behavior, which is an anonymous block code like: DO LANGUAGE plpgsql $$ BEGIN -- this is a SELECT PERFORM 'hello world'::TEXT; END; $$; which is expected to reports a "SELECT $1::text" with pg_stat_statements.track = top and track_utility = off, and also doesn't seem right. That test was added in 83f2061dd03, apparently covered by "Also, significantly expand pg_stat_statements' regression test script", but without any discussion on that specific behavior as far as I can see after a quick look. Assuming that we want to fix it, simply increasing the exec_nested_level in the fallback calls to prev_ProcessUtility/standard_ProcessUtility for handled utility commands should get the correct behavior.
В списке pgsql-bugs по дате отправления: