Обсуждение: [HACKERS] pg_stat_statements query normalization, and the 'in' operator

Поиск
Список
Период
Сортировка

[HACKERS] pg_stat_statements query normalization, and the 'in' operator

От
unixway.drive@gmail.com
Дата:
Hello there,

Given the following list of queries:
  create table foo (id serial, bar integer);  select * from foo where id in (1);  select * from foo where id in (2,3);
select* from foo where id in (1,3,5);  select * from foo where id in (select id from foo);
 

would it be possible to have first three select queries to be normalized 
into a single one so that 'select query from pg_stat_statements' returns 
something like:
  select * from foo where id in (...);  select * from foo where id in (select id from foo);  (2 rows)

instead of:
  select * from foo where id in (?,?);  select * from foo where id in (?,?,?);  select * from foo where id in (?);
select* from foo where id in (select id from foo);  (4 rows)
 

?



Re: [HACKERS] pg_stat_statements query normalization, and the 'in' operator

От
Tom Lane
Дата:
unixway.drive@gmail.com writes:
> Given the following list of queries:

>    create table foo (id serial, bar integer);
>    select * from foo where id in (1);
>    select * from foo where id in (2,3);
>    select * from foo where id in (1,3,5);
>    select * from foo where id in (select id from foo);

> would it be possible to have first three select queries to be normalized 
> into a single one so that 'select query from pg_stat_statements' returns 
> something like:

>    select * from foo where id in (...);
>    select * from foo where id in (select id from foo);

Wouldn't recommend holding your breath for that.  But you could do the
same conversion on the client side that the parser would do anyway:

select * from foo where id = any ('{1,3,5}'::integer[]);
        regards, tom lane