1919const activitySQL string = `
2020SELECT (extract(epoch from COALESCE(backend_start, pg_catalog.pg_postmaster_start_time()))::int::text || pg_catalog.to_char(pid, 'FM0000000'))::bigint,
2121 datid, datname, usesysid, usename, pid, application_name, client_addr::text, client_port,
22- backend_start, xact_start, query_start, state_change, COALESCE(wait_event_type, '') = 'Lock' as waiting, backend_xid, backend_xmin, wait_event_type, wait_event, backend_type, %s, state, query
22+ backend_start, xact_start, query_start, state_change, COALESCE(wait_event_type, '') = 'Lock' as waiting,
23+ backend_xid, backend_xmin, wait_event_type, wait_event, backend_type, %s, state, query, %s
2324FROM %s
2425WHERE pid IS NOT NULL`
2526
2627func GetBackends (ctx context.Context , c * Collection , db * sql.DB ) ([]state.PostgresBackend , error ) {
2728 var blockingPidsField string
29+ var queryIdField string
2830 var sourceTable string
2931
3032 if c .GlobalOpts .CollectPostgresLocks {
@@ -33,13 +35,19 @@ func GetBackends(ctx context.Context, c *Collection, db *sql.DB) ([]state.Postgr
3335 blockingPidsField = "NULL"
3436 }
3537
38+ if c .PostgresVersion .Numeric >= state .PostgresVersion14 {
39+ queryIdField = "coalesce(query_id, 0)"
40+ } else {
41+ queryIdField = "0"
42+ }
43+
3644 if c .HelperExists ("get_stat_activity" , nil ) {
3745 sourceTable = "pganalyze.get_stat_activity()"
3846 } else {
3947 sourceTable = "pg_catalog.pg_stat_activity"
4048 }
4149
42- stmt , err := db .PrepareContext (ctx , QueryMarkerSQL + fmt .Sprintf (activitySQL , blockingPidsField , sourceTable ))
50+ stmt , err := db .PrepareContext (ctx , QueryMarkerSQL + fmt .Sprintf (activitySQL , blockingPidsField , queryIdField , sourceTable ))
4351 if err != nil {
4452 return nil , err
4553 }
@@ -63,7 +71,7 @@ func GetBackends(ctx context.Context, c *Collection, db *sql.DB) ([]state.Postgr
6371 & row .ClientPort , & row .BackendStart , & row .XactStart , & row .QueryStart ,
6472 & row .StateChange , & row .Waiting , & row .BackendXid , & row .BackendXmin ,
6573 & row .WaitEventType , & row .WaitEvent , & row .BackendType , pq .Array (& row .BlockedByPids ),
66- & row .State , & row .Query )
74+ & row .State , & row .Query , & row . QueryId )
6775 if err != nil {
6876 return nil , err
6977 }
0 commit comments