@@ -16,14 +16,19 @@ type PgStatStatementsRow struct {
1616 // Number of times executed
1717 Calls int64 `json:"calls"`
1818 // Total time spent in the statement, in milliseconds
19+ // Supported since PostgreSQL 9.5
1920 TotalTime float64 `json:"total_time"`
2021 // Minimum time spent in the statement, in milliseconds
22+ // Supported since PostgreSQL 9.5
2123 MinTime float64 `json:"min_time"`
2224 // Maximum time spent in the statement, in milliseconds
25+ // Supported since PostgreSQL 9.5
2326 MaxTime float64 `json:"max_time"`
2427 // Mean time spent in the statement, in milliseconds
28+ // Supported since PostgreSQL 9.5
2529 MeanTime float64 `json:"mean_time"`
2630 // Population standard deviation of time spent in the statement, in milliseconds
31+ // Supported since PostgreSQL 9.5
2732 StddevTime float64 `json:"stddev_time"`
2833 // Total number of rows retrieved or affected by the statement
2934 Rows int64 `json:"rows"`
@@ -54,6 +59,17 @@ type PgStatStatementsRow struct {
5459}
5560
5661func (s * PgStats ) fetchStatements () (PgStatStatementsView , error ) {
62+ version , err := s .getPgVersion ()
63+ if err != nil {
64+ return nil , err
65+ }
66+ if version > 9.4 {
67+ return s .fetchStatements95 ()
68+ }
69+ return s .fetchStatements94 ()
70+ }
71+
72+ func (s * PgStats ) fetchStatements95 () (PgStatStatementsView , error ) {
5773 db := s .conn .db
5874 query := "select userid,dbid,queryid,query,calls," +
5975 "total_time,min_time,max_time,mean_time,stddev_time," +
@@ -82,3 +98,31 @@ func (s *PgStats) fetchStatements() (PgStatStatementsView, error) {
8298 }
8399 return data , rows .Err ()
84100}
101+
102+ func (s * PgStats ) fetchStatements94 () (PgStatStatementsView , error ) {
103+ db := s .conn .db
104+ query := "select userid,dbid,queryid,query,calls," +
105+ "rows,shared_blks_hit,shared_blks_read,shared_blks_dirtied,shared_blks_written," +
106+ "local_blks_hit,local_blks_read,local_blks_dirtied,local_blks_written,temp_blks_read," +
107+ "temp_blks_written,blk_read_time,blk_write_time from pg_stat_statements"
108+
109+ rows , err := db .Query (query )
110+ if err != nil {
111+ return nil , err
112+ }
113+ defer rows .Close ()
114+
115+ data := make ([]PgStatStatementsRow , 0 )
116+ for rows .Next () {
117+ row := new (PgStatStatementsRow )
118+ err := rows .Scan (& row .Userid , & row .Dbid , & row .Queryid , & row .Query , & row .Calls ,
119+ & row .Rows , & row .SharedBlksHit , & row .SharedBlksRead , & row .SharedBlksDirtied , & row .SharedBlksWritten ,
120+ & row .LocalBlksHit , & row .LocalBlksRead , & row .LocalBlksDirtied , & row .LocalBlksWritten , & row .TempBlksRead ,
121+ & row .TempBlksWritten , & row .BlkReadTime , & row .BlkWriteTime )
122+ if err != nil {
123+ return nil , err
124+ }
125+ data = append (data , * row )
126+ }
127+ return data , rows .Err ()
128+ }
0 commit comments