From f8ed33a92a65310715660af93bbc93446cee125b Mon Sep 17 00:00:00 2001 From: Ibrar Ahmed Date: Sun, 21 Mar 2021 00:04:39 +0500 Subject: [PATCH] PG-188: Added a new column to monitor the query state. --- Makefile | 2 +- pg_stat_monitor--1.0.sql | 22 ++++---- pg_stat_monitor.c | 42 +++++++++++----- pg_stat_monitor.h | 7 ++- regression/expected/application_name.out | 11 ++-- regression/expected/basic.out | 7 +-- regression/expected/cmd_type.out | 27 +++++----- regression/expected/counters.out | 6 ++- regression/expected/database.out | 7 +-- regression/expected/error.out | 25 ++++----- regression/expected/relations.out | 64 +++++++++++++----------- regression/expected/rows.out | 19 +++---- regression/expected/top_query.out | 35 ++++++------- regression/sql/error.sql | 2 +- regression/sql/rows.sql | 2 +- 15 files changed, 153 insertions(+), 125 deletions(-) diff --git a/Makefile b/Makefile index fdbe01e..3d7038b 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ PGFILEDESC = "pg_stat_monitor - execution statistics of SQL statements" LDFLAGS_SL += $(filter -lm, $(LIBS)) REGRESS_OPTS = --temp-config $(top_srcdir)/contrib/pg_stat_monitor/pg_stat_monitor.conf --inputdir=regression -REGRESS = basic version guc counters relations database top_query application_name cmd_type error rows +REGRESS = basic version guc counters relations database top_query application_name cmd_type error state rows # Disabled because these tests require "shared_preload_libraries=pg_stat_statements", # which typical installcheck users do not have (e.g. buildfarm clients). diff --git a/pg_stat_monitor--1.0.sql b/pg_stat_monitor--1.0.sql index bdf3dd8..552801f 100644 --- a/pg_stat_monitor--1.0.sql +++ b/pg_stat_monitor--1.0.sql @@ -34,7 +34,7 @@ CREATE FUNCTION pg_stat_monitor_internal(IN showtext boolean, OUT planid text, OUT query text, OUT query_plan text, - OUT state int8, + OUT state_code int8, OUT top_queryid text, OUT application_name text, @@ -51,7 +51,7 @@ CREATE FUNCTION pg_stat_monitor_internal(IN showtext boolean, OUT max_time float8, OUT mean_time float8, OUT stddev_time float8, - OUT rows int8, + OUT rows_retrieved int8, OUT plans_calls int8, -- 23 OUT plan_total_time float8, @@ -83,15 +83,15 @@ RETURNS SETOF record AS 'MODULE_PATHNAME', 'pg_stat_monitor' LANGUAGE C STRICT VOLATILE PARALLEL SAFE; -CREATE OR REPLACE FUNCTION get_state(state int8) RETURNS TEXT AS +CREATE OR REPLACE FUNCTION get_state(state_code int8) RETURNS TEXT AS $$ SELECT CASE - WHEN state = 0 THEN 'PARSED' - WHEN state = 1 THEN 'PLANNING' - WHEN state = 2 THEN 'EXECUTION FINISHED' - WHEN state = 3 THEN 'ERROR' - WHEN state = 4 THEN 'FINISHED' + WHEN state_code = 0 THEN 'PARSING' + WHEN state_code = 1 THEN 'PLANNING' + WHEN state_code = 2 THEN 'ACTIVE' + WHEN state_code = 3 THEN 'FINISHED' + WHEN state_code = 4 THEN 'FINISHED WITH ERROR' END $$ LANGUAGE SQL PARALLEL SAFE; @@ -160,7 +160,7 @@ CREATE VIEW pg_stat_monitor AS SELECT round( CAST(max_time as numeric), 4)::float8 as max_time, round( CAST(mean_time as numeric), 4)::float8 as mean_time, round( CAST(stddev_time as numeric), 4)::float8 as stddev_time, - rows, + rows_retrieved, plans_calls, round( CAST(plan_total_time as numeric), 4)::float8 as plan_total_time, round( CAST(plan_min_time as numeric), 4)::float8 as plan_min_time, @@ -185,8 +185,8 @@ CREATE VIEW pg_stat_monitor AS SELECT wal_records, wal_fpi, wal_bytes, - state, - get_state(state) as state_value + state_code, + get_state(state_code) as state FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid ORDER BY bucket_start_time; diff --git a/pg_stat_monitor.c b/pg_stat_monitor.c index 948a78e..ea19a68 100644 --- a/pg_stat_monitor.c +++ b/pg_stat_monitor.c @@ -366,6 +366,8 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query) static void pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) { + uint64 queryId = queryDesc->plannedstmt->queryId; + if(getrusage(RUSAGE_SELF, &rusage_start) != 0) elog(DEBUG1, "pg_stat_monitor: failed to execute getrusage"); @@ -394,6 +396,22 @@ pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) queryDesc->totaltime = InstrAlloc(1, INSTRUMENT_ALL); MemoryContextSwitchTo(oldcxt); } + pgss_store(queryId, /* query id */ + queryDesc->sourceText, /* query text */ + NULL, /* PlanInfo */ + queryDesc->operation, /* CmdType */ + NULL, /* SysInfo */ + NULL, /* ErrorInfo */ + 0, /* totaltime */ + 0, /* rows */ + NULL, /* bufusage */ +#if PG_VERSION_NUM >= 130000 + NULL, /* walusage */ +#else + NULL, +#endif + NULL, + PGSS_EXEC); /* pgssStoreKind */ } } @@ -519,7 +537,7 @@ pgss_ExecutorEnd(QueryDesc *queryDesc) NULL, #endif NULL, - PGSS_EXEC); /* pgssStoreKind */ + PGSS_FINISHED); /* pgssStoreKind */ } if (prev_ExecutorEnd) prev_ExecutorEnd(queryDesc); @@ -906,6 +924,7 @@ pgss_update_entry(pgssEntry *entry, if (reset) memset(&entry->counters, 0, sizeof(Counters)); + e->counters.state = kind; if (kind == PGSS_PLAN) { if (e->counters.plancalls.calls == 0) @@ -929,9 +948,8 @@ pgss_update_entry(pgssEntry *entry, if (e->counters.plantime.min_time > total_time) e->counters.plantime.min_time = total_time; if (e->counters.plantime.max_time < total_time) e->counters.plantime.max_time = total_time; } - else + else if (kind == PGSS_FINISHED) { - e->counters.state = kind; if (e->counters.calls.calls == 0) e->counters.calls.usage = USAGE_INIT; e->counters.calls.calls += 1; @@ -1130,7 +1148,7 @@ pgss_store_error(uint64 queryid, NULL, /* bufusage */ NULL, /* walusage */ NULL, /* pgssJumbleState */ - PGSS_EXEC); /* pgssStoreKind */ + PGSS_ERROR); /* pgssStoreKind */ } static void @@ -1153,7 +1171,7 @@ pgss_store_utility(const char *query, bufusage, /* bufusage */ walusage, /* walusage */ NULL, /* pgssJumbleState */ - PGSS_EXEC); /* pgssStoreKind */ + PGSS_FINISHED); /* pgssStoreKind */ } /* @@ -1219,7 +1237,9 @@ pgss_store(uint64 queryid, elog(DEBUG1, "pg_stat_monitor: out of memory"); break; } + case PGSS_ERROR: case PGSS_EXEC: + case PGSS_FINISHED: { pgssQueryEntry *query_entry; query_entry = pgss_store_query_info(bucketid, queryid, dbid, userid, ip, query, strlen(query), kind); @@ -1252,13 +1272,9 @@ pgss_store(uint64 queryid, kind); /* kind */ } break; - case PGSS_FINISHED: case PGSS_NUMKIND: case PGSS_INVALID: break; - - case PGSS_ERROR: - break; } LWLockRelease(pgss->lock); } @@ -1319,6 +1335,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, MemoryContext oldcontext; HASH_SEQ_STATUS hash_seq; pgssEntry *entry; + pgssQueryEntry *query_entry; char parentid_txt[64]; pgssSharedState *pgss = pgsm_get_ss(); HTAB *pgss_hash = pgsm_get_hash(); @@ -1377,7 +1394,6 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, uint64 userid = entry->key.userid; uint64 ip = entry->key.ip; uint64 planid = entry->key.planid; - unsigned char *buf = pgss_qbuf[bucketid]; char *query_txt = (char*) malloc(PGSM_QUERY_MAX_LEN); bool is_allowed_role = is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS); @@ -1385,7 +1401,8 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, if (!IsBucketValid(bucketid)) continue; - if (!hash_find_query_entry(bucketid, queryid, dbid, userid, ip)) + query_entry = hash_find_query_entry(bucketid, queryid, dbid, userid, ip); + if (query_entry == NULL) continue; if (read_query(buf, bucketid, queryid, query_txt) == 0) @@ -2706,7 +2723,6 @@ pgss_store_query_info(uint64 bucketid, if (!entry) return NULL; - entry->state = kind; memcpy(&buf_len, buf, sizeof (uint64)); if (buf_len == 0) buf_len += sizeof (uint64); @@ -2830,7 +2846,7 @@ set_qbuf(int i, unsigned char *buf) void pgsm_emit_log_hook(ErrorData *edata) { - if (!IsSystemInitialized()) + if (!IsSystemInitialized() || edata == NULL) goto exit; if ((edata->elevel == ERROR || edata->elevel == WARNING || edata->elevel == INFO || edata->elevel == DEBUG1)) diff --git a/pg_stat_monitor.h b/pg_stat_monitor.h index c6b9762..ef2ad9d 100644 --- a/pg_stat_monitor.h +++ b/pg_stat_monitor.h @@ -139,8 +139,8 @@ typedef enum pgssStoreKind PGSS_PARSE = 0, PGSS_PLAN, PGSS_EXEC, - PGSS_ERROR, PGSS_FINISHED, + PGSS_ERROR, PGSS_NUMKIND /* Must be last value of this enum */ } pgssStoreKind; @@ -181,9 +181,8 @@ typedef struct pgssQueryHashKey typedef struct pgssQueryEntry { - pgssQueryHashKey key; /* hash key of entry - MUST BE FIRST */ - uint64 pos; /* bucket number */ - uint64 state; /* query state */ + pgssQueryHashKey key; /* hash key of entry - MUST BE FIRST */ + uint64 pos; /* bucket number */ } pgssQueryEntry; typedef struct PlanInfo diff --git a/regression/expected/application_name.out b/regression/expected/application_name.out index 46eeec5..9d40e02 100644 --- a/regression/expected/application_name.out +++ b/regression/expected/application_name.out @@ -12,11 +12,12 @@ SELECT 1 AS num; (1 row) SELECT query,application_name FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | application_name ----------------------------------+----------------------------- - SELECT $1 AS num | pg_regress/application_name - SELECT pg_stat_monitor_reset(); | pg_regress/application_name -(2 rows) + query | application_name +--------------------------------------------------------------------------------+----------------------------- + SELECT $1 AS num | pg_regress/application_name + SELECT pg_stat_monitor_reset(); | pg_regress/application_name + SELECT query,application_name FROM pg_stat_monitor ORDER BY query COLLATE "C"; | pg_regress/application_name +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/basic.out b/regression/expected/basic.out index c321b4c..04b5eb8 100644 --- a/regression/expected/basic.out +++ b/regression/expected/basic.out @@ -12,11 +12,12 @@ SELECT 1 AS num; (1 row) SELECT query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query ---------------------------------- + query +--------------------------------------------------------------- SELECT $1 AS num SELECT pg_stat_monitor_reset(); -(2 rows) + SELECT query FROM pg_stat_monitor ORDER BY query COLLATE "C"; +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/cmd_type.out b/regression/expected/cmd_type.out index 625eb39..aba4be0 100644 --- a/regression/expected/cmd_type.out +++ b/regression/expected/cmd_type.out @@ -24,19 +24,20 @@ SELECT b FROM t2 FOR UPDATE; TRUNCATE t1; DROP TABLE t1; SELECT query, cmd_type, cmd_type_text FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | cmd_type | cmd_type_text ----------------------------------+----------+--------------- - CREATE TABLE t1 (a INTEGER); | 0 | - CREATE TABLE t2 (b INTEGER); | 0 | - DELETE FROM t1; | 4 | DELETE - DROP TABLE t1; | 0 | - INSERT INTO t1 VALUES($1) | 3 | INSERT - SELECT a FROM t1; | 1 | SELECT - SELECT b FROM t2 FOR UPDATE; | 1 | SELECT - SELECT pg_stat_monitor_reset(); | 1 | SELECT - TRUNCATE t1; | 0 | - UPDATE t1 SET a = $1 | 2 | UPDATE -(10 rows) + query | cmd_type | cmd_type_text +-----------------------------------------------------------------------------------------+----------+--------------- + CREATE TABLE t1 (a INTEGER); | 0 | + CREATE TABLE t2 (b INTEGER); | 0 | + DELETE FROM t1; | 4 | DELETE + DROP TABLE t1; | 0 | + INSERT INTO t1 VALUES($1) | 3 | INSERT + SELECT a FROM t1; | 1 | SELECT + SELECT b FROM t2 FOR UPDATE; | 1 | SELECT + SELECT pg_stat_monitor_reset(); | 1 | SELECT + SELECT query, cmd_type, cmd_type_text FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 1 | SELECT + TRUNCATE t1; | 0 | + UPDATE t1 SET a = $1 | 2 | UPDATE +(11 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/counters.out b/regression/expected/counters.out index 9c11c4f..c96775e 100644 --- a/regression/expected/counters.out +++ b/regression/expected/counters.out @@ -40,7 +40,8 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; ----------------------------------------------------------------------------------+------- SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; | 4 SELECT pg_stat_monitor_reset(); | 1 -(2 rows) + SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 1 +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -69,6 +70,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; ---------------------------------------------------------------------------------------------------+------- SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; | 1000 SELECT pg_stat_monitor_reset(); | 1 + SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 1 do $$ +| 1 declare +| n integer:= 1; +| @@ -79,7 +81,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; n := n + 1; +| end loop; +| end $$; | -(3 rows) +(4 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/database.out b/regression/expected/database.out index 4648e38..378cbea 100644 --- a/regression/expected/database.out +++ b/regression/expected/database.out @@ -28,12 +28,13 @@ SELECT * FROM t3,t4 WHERE t3.c = t4.d; \c contrib_regression SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - datname | query ---------------------+---------------------------------------- + datname | query +--------------------+------------------------------------------------------------------------ db1 | SELECT * FROM t1,t2 WHERE t1.a = t2.b; db2 | SELECT * FROM t3,t4 WHERE t3.c = t4.d; + contrib_regression | SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C"; contrib_regression | SELECT pg_stat_monitor_reset(); -(3 rows) +(4 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/error.out b/regression/expected/error.out index e0ead7b..1c278c4 100644 --- a/regression/expected/error.out +++ b/regression/expected/error.out @@ -20,18 +20,19 @@ BEGIN RAISE WARNING 'warning message'; END $$; WARNING: warning message -SELECT query, elevel,sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | elevel | sqlcode | message -----------------------------------+--------+---------+----------------------------------- - ELECET * FROM unknown; | 20 | 42601 | syntax error at or near "ELECET" - SELECT * FROM unknown; | 20 | 42P01 | relation "unknown" does not exist - SELECT 1/0; | 20 | 22012 | division by zero - SELECT pg_stat_monitor_reset(); | 0 | | - do $$ +| 19 | 01000 | warning message - BEGIN +| | | - RAISE WARNING 'warning message';+| | | - END $$; | | | -(5 rows) +SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | elevel | sqlcode | message +-----------------------------------------------------------------------------------------+--------+---------+----------------------------------- + ELECET * FROM unknown; | 20 | 42601 | syntax error at or near "ELECET" + SELECT * FROM unknown; | 20 | 42P01 | relation "unknown" does not exist + SELECT 1/0; | 20 | 22012 | division by zero + SELECT pg_stat_monitor_reset(); | 0 | | + SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 0 | | + do $$ +| 19 | 01000 | warning message + BEGIN +| | | + RAISE WARNING 'warning message'; +| | | + END $$; | | | +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/relations.out b/regression/expected/relations.out index 1ef8c88..d05d246 100644 --- a/regression/expected/relations.out +++ b/regression/expected/relations.out @@ -37,14 +37,15 @@ SELECT * FROM foo1, foo2, foo3, foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query; - query | relations ----------------------------------------+--------------------------------------------------- - SELECT * FROM foo1, foo2, foo3, foo4; | {public.foo1,public.foo2,public.foo3,public.foo4} - SELECT * FROM foo1, foo2, foo3; | {public.foo1,public.foo2,public.foo3} - SELECT * FROM foo1, foo2; | {public.foo1,public.foo2} - SELECT * FROM foo1; | {public.foo1} - SELECT pg_stat_monitor_reset(); | -(5 rows) + query | relations +--------------------------------------------------------------+--------------------------------------------------- + SELECT * FROM foo1, foo2, foo3, foo4; | {public.foo1,public.foo2,public.foo3,public.foo4} + SELECT * FROM foo1, foo2, foo3; | {public.foo1,public.foo2,public.foo3} + SELECT * FROM foo1, foo2; | {public.foo1,public.foo2} + SELECT * FROM foo1; | {public.foo1} + SELECT pg_stat_monitor_reset(); | + SELECT query, relations from pg_stat_monitor ORDER BY query; | {public.pg_stat_monitor*,pg_catalog.pg_database} +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -88,14 +89,15 @@ SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query; - query | relations ------------------------------------------------------------+------------------------------------------- - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3; | {sch1.foo1,sch2.foo2,sch3.foo3} - SELECT * FROM sch1.foo1, sch2.foo2; | {sch1.foo1,sch2.foo2} - SELECT * FROM sch1.foo1; | {sch1.foo1} - SELECT pg_stat_monitor_reset(); | -(5 rows) + query | relations +--------------------------------------------------------------+-------------------------------------------------- + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3; | {sch1.foo1,sch2.foo2,sch3.foo3} + SELECT * FROM sch1.foo1, sch2.foo2; | {sch1.foo1,sch2.foo2} + SELECT * FROM sch1.foo1; | {sch1.foo1} + SELECT pg_stat_monitor_reset(); | + SELECT query, relations from pg_stat_monitor ORDER BY query; | {public.pg_stat_monitor*,pg_catalog.pg_database} +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -120,12 +122,13 @@ SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query; - query | relations --------------------------------------------------+----------------------------------------------- - SELECT * FROM sch1.foo1, foo1; | {sch1.foo1,public.foo1} - SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2; | {sch1.foo1,sch2.foo2,public.foo1,public.foo2} - SELECT pg_stat_monitor_reset(); | -(3 rows) + query | relations +--------------------------------------------------------------+-------------------------------------------------- + SELECT * FROM sch1.foo1, foo1; | {sch1.foo1,public.foo1} + SELECT * FROM sch1.foo1, sch2.foo2, foo1, foo2; | {sch1.foo1,sch2.foo2,public.foo1,public.foo2} + SELECT pg_stat_monitor_reset(); | + SELECT query, relations from pg_stat_monitor ORDER BY query; | {public.pg_stat_monitor*,pg_catalog.pg_database} +(4 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -165,14 +168,15 @@ SELECT * FROM v1,v2,v3,v4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query; - query | relations ----------------------------------+----------------------------------------------------------------------------------------------- - SELECT * FROM v1,v2,v3,v4; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} - SELECT * FROM v1,v2,v3; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} - SELECT * FROM v1,v2; | {public.v1*,public.foo1,public.v2*,public.foo2} - SELECT * FROM v1; | {public.v1*,public.foo1} - SELECT pg_stat_monitor_reset(); | -(5 rows) + query | relations +--------------------------------------------------------------+----------------------------------------------------------------------------------------------- + SELECT * FROM v1,v2,v3,v4; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} + SELECT * FROM v1,v2,v3; | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} + SELECT * FROM v1,v2; | {public.v1*,public.foo1,public.v2*,public.foo2} + SELECT * FROM v1; | {public.v1*,public.foo1} + SELECT pg_stat_monitor_reset(); | + SELECT query, relations from pg_stat_monitor ORDER BY query; | {public.pg_stat_monitor*,pg_catalog.pg_database} +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/rows.out b/regression/expected/rows.out index 401acf3..d6b3c09 100644 --- a/regression/expected/rows.out +++ b/regression/expected/rows.out @@ -8540,15 +8540,16 @@ SELECt * FROM t2 WHERE b % 2 = 0; 5000 (2500 rows) -SELECT query, rows FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | rows --------------------------------------+------ - SELECT * FROM t1 LIMIT $1 | 10 - SELECT * FROM t1; | 1000 - SELECT b FROM t2 FOR UPDATE; | 5000 - SELECT pg_stat_monitor_reset(); | 1 - SELECt * FROM t2 WHERE b % $1 = $2 | 2500 -(5 rows) +SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | rows_retrieved +-------------------------------------------------------------------------------+---------------- + SELECT * FROM t1 LIMIT $1 | 10 + SELECT * FROM t1; | 1000 + SELECT b FROM t2 FOR UPDATE; | 5000 + SELECT pg_stat_monitor_reset(); | 1 + SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C"; | 0 + SELECt * FROM t2 WHERE b % $1 = $2 | 2500 +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/top_query.out b/regression/expected/top_query.out index 07e9eee..5d810f8 100644 --- a/regression/expected/top_query.out +++ b/regression/expected/top_query.out @@ -23,23 +23,24 @@ SELECT add2(1,2); (1 row) SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | top_query --------------------------------------------------------------+-------------------- - CREATE OR REPLACE FUNCTION add(int, int) RETURNS INTEGER AS+| - $$ +| - BEGIN +| - return (select $1 + $2); +| - END; $$ language plpgsql; | - CREATE OR REPLACE function add2(int, int) RETURNS int as +| - $$ +| - BEGIN +| - return add($1,$2); +| - END; +| - $$ language plpgsql; | - SELECT (select $1 + $2) | SELECT add2($1,$2) - SELECT add2($1,$2) | - SELECT pg_stat_monitor_reset(); | -(5 rows) + query | top_query +--------------------------------------------------------------------------+-------------------- + CREATE OR REPLACE FUNCTION add(int, int) RETURNS INTEGER AS +| + $$ +| + BEGIN +| + return (select $1 + $2); +| + END; $$ language plpgsql; | + CREATE OR REPLACE function add2(int, int) RETURNS int as +| + $$ +| + BEGIN +| + return add($1,$2); +| + END; +| + $$ language plpgsql; | + SELECT (select $1 + $2) | SELECT add2($1,$2) + SELECT add2($1,$2) | + SELECT pg_stat_monitor_reset(); | + SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C"; | +(6 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/sql/error.sql b/regression/sql/error.sql index 3f98f75..5102782 100644 --- a/regression/sql/error.sql +++ b/regression/sql/error.sql @@ -9,6 +9,6 @@ BEGIN RAISE WARNING 'warning message'; END $$; -SELECT query, elevel,sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; +SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C"; SELECT pg_stat_monitor_reset(); DROP EXTENSION pg_stat_monitor; diff --git a/regression/sql/rows.sql b/regression/sql/rows.sql index 02f0f70..93ae9c1 100644 --- a/regression/sql/rows.sql +++ b/regression/sql/rows.sql @@ -12,7 +12,7 @@ SELECT * FROM t2; SELECT * FROM t1 LIMIT 10; SELECt * FROM t2 WHERE b % 2 = 0; -SELECT query, rows FROM pg_stat_monitor ORDER BY query COLLATE "C"; +SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C"; SELECT pg_stat_monitor_reset(); DROP TABLE t1;