Re: pg_stat_statements: rows not updated for CREATE TABLE AS SELECTstatements - Mailing list pgsql-bugs

From Fujii Masao
Subject Re: pg_stat_statements: rows not updated for CREATE TABLE AS SELECTstatements
Date
Msg-id c9463107-d605-9d9e-54e5-f065f2fc3c1f@oss.nttdata.com
Whole thread Raw
In response to pg_stat_statements: rows not updated for CREATE TABLE AS SELECTstatements  (legrand legrand <legrand_legrand@hotmail.com>)
Responses Re: pg_stat_statements: rows not updated for CREATE TABLE AS SELECTstatements
List pgsql-bugs

On 2020/03/16 2:35, legrand legrand wrote:
> Hello,
> it seems that column "rows" is not updated after CREATE TABLE AS SELECT
> statements.
> 
> pg13devel (snapshot 2020-03-14)
> postgres=# select name,setting from pg_settings where name like 'pg_stat%';
>                 name               | setting
> ----------------------------------+---------
>   pg_stat_statements.max           | 5000
>   pg_stat_statements.save          | on
>   pg_stat_statements.track         | all
>   pg_stat_statements.track_utility | on
> (4 rows)
> 
> postgres=# select pg_stat_statements_reset();
>   pg_stat_statements_reset
> --------------------------
> 
> (1 row)
> 
> 
> postgres=# create table ctas as select * from pg_class;
> SELECT 386
> postgres=# select query,calls,rows from pg_stat_statements where query like
> 'create table ctas%';
>                      query                    | calls | rows
> ---------------------------------------------+-------+------
>   create table ctas as select * from pg_class |     1 |    0
> (1 row)

Thanks for the report! Yeah, it seems worth improving this.

> after modifying the following line in pg_stat_statements.c
> 
> rows = (qc && qc->commandTag == CMDTAG_COPY) ? qc->nprocessed : 0;
> into
> rows = (qc && (qc->commandTag == CMDTAG_COPY
>                        || qc->commandTag == CMDTAG_SELECT)
>             ) ? qc->nprocessed : 0;
> 
> column rows seems properly updated.
> 
> What do you think about that fix ?

The utility commands that return CMDTAG_SELECT are
only CREATE TABLE AS SELECT and CREATE MATERIALIZED VIEW?
I'd just like to confirm that there is no case where "rows" must not
be counted when CMDTAG_SELECT is returned.

BTW, "rows" should be updated when FETCH or MOVE is executed
because each command returns or affects the rows?

Regards,

-- 
Fujii Masao
NTT DATA CORPORATION
Advanced Platform Technology Group
Research and Development Headquarters



pgsql-bugs by date:

Previous
From: Fan Liu
Date:
Subject: RE: BUG #16317: max_wal_size does not remove WAL files, cause "nospace left"
Next
From: Rajiv Ranjan
Date:
Subject: Re: BUG #16314: Database Cache Hit Ratio (Warning)