diff --git a/pg_stat_monitor--1.0--2.0.sql b/pg_stat_monitor--1.0--2.0.sql index 5f8cf1e..18d28b1 100644 --- a/pg_stat_monitor--1.0--2.0.sql +++ b/pg_stat_monitor--1.0--2.0.sql @@ -3,3 +3,274 @@ -- complain if script is sourced in psql, rather than via CREATE EXTENSION \echo Use "ALTER EXTENSION pg_stat_monitor" to load this file. \quit +DROP FUNCTION pg_stat_monitor_internal CASCADE; +DROP FUNCTION pgsm_create_11_view CASCADE; +DROP FUNCTION pgsm_create_13_view CASCADE; +DROP FUNCTION pgsm_create_14_view CASCADE; +DROP FUNCTION pgsm_create_view CASCADE; + +-- pg_stat_monitor internal function, must not call outside from this file. +CREATE FUNCTION pg_stat_monitor_internal( + IN showtext boolean, + OUT bucket int8, -- 0 + OUT userid oid, + OUT dbid oid, + OUT client_ip int8, + + OUT queryid text, -- 4 + OUT planid text, + OUT query text, + OUT query_plan text, + OUT top_queryid text, + OUT top_query text, + OUT application_name text, + + OUT relations text, -- 11 + OUT cmd_type int, + OUT elevel int, + OUT sqlcode TEXT, + OUT message text, + OUT bucket_start_time text, + + OUT calls int8, -- 16 + + OUT total_exec_time float8, + OUT min_exec_time float8, + OUT max_exec_time float8, + OUT mean_exec_time float8, + OUT stddev_exec_time float8, + + OUT rows_retrieved int8, + + OUT plans_calls int8, -- 23 + + OUT total_plan_time float8, + OUT min_plan_time float8, + OUT max_plan_time float8, + OUT mean_plan_time float8, + OUT stddev_plan_time float8, + + OUT shared_blks_hit int8, -- 29 + OUT shared_blks_read int8, + OUT shared_blks_dirtied int8, + OUT shared_blks_written int8, + OUT local_blks_hit int8, + OUT local_blks_read int8, + OUT local_blks_dirtied int8, + OUT local_blks_written int8, + OUT temp_blks_read int8, + OUT temp_blks_written int8, + OUT blk_read_time float8, + OUT blk_write_time float8, + OUT resp_calls text, -- 41 + OUT cpu_user_time float8, + OUT cpu_sys_time float8, + OUT wal_records int8, + OUT wal_fpi int8, + OUT wal_bytes numeric, + OUT comments TEXT, + OUT toplevel BOOLEAN +) +RETURNS SETOF record +AS 'MODULE_PATHNAME', 'pg_stat_monitor' +LANGUAGE C STRICT VOLATILE PARALLEL SAFE; + +-- Register a view on the function for ease of use. +CREATE FUNCTION pgsm_create_11_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + + +CREATE FUNCTION pgsm_create_13_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes, + -- PostgreSQL-13 Specific Coulumns + plans_calls +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + +CREATE FUNCTION pgsm_create_14_view() RETURNS INT AS +$$ +BEGIN +CREATE VIEW pg_stat_monitor AS SELECT + bucket, + bucket_start_time AS bucket_start_time, + userid::regrole, + datname, + '0.0.0.0'::inet + client_ip AS client_ip, + queryid, + toplevel, + top_queryid, + query, + comments, + planid, + query_plan, + top_query, + application_name, + string_to_array(relations, ',') AS relations, + cmd_type, + get_cmd_type(cmd_type) AS cmd_type_text, + elevel, + sqlcode, + message, + calls, + total_exec_time, + min_exec_time, + max_exec_time, + mean_exec_time, + stddev_exec_time, + rows_retrieved, + shared_blks_hit, + shared_blks_read, + shared_blks_dirtied, + shared_blks_written, + local_blks_hit, + local_blks_read, + local_blks_dirtied, + local_blks_written, + temp_blks_read, + temp_blks_written, + blk_read_time, + blk_write_time, + (string_to_array(resp_calls, ',')) resp_calls, + cpu_user_time, + cpu_sys_time, + wal_records, + wal_fpi, + wal_bytes, + + -- PostgreSQL-14 Specific Columns + plans_calls, + total_plan_time, + min_plan_time, + max_plan_time, + mean_plan_time, + stddev_plan_time +FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid +ORDER BY bucket_start_time; +RETURN 0; +END; +$$ LANGUAGE plpgsql; + +CREATE FUNCTION pgsm_create_view() RETURNS INT AS +$$ + DECLARE ver integer; + BEGIN + SELECT current_setting('server_version_num') INTO ver; + IF (ver >= 14000) THEN + return pgsm_create_14_view(); + END IF; + IF (ver >= 13000) THEN + return pgsm_create_13_view(); + END IF; + IF (ver >= 11000) THEN + return pgsm_create_11_view(); + END IF; + RETURN 0; + END; +$$ LANGUAGE plpgsql; + +SELECT pgsm_create_view(); + +GRANT SELECT ON pg_stat_monitor TO PUBLIC; + diff --git a/pg_stat_monitor--2.0.sql b/pg_stat_monitor--2.0.sql index df06d63..f3e299a 100644 --- a/pg_stat_monitor--2.0.sql +++ b/pg_stat_monitor--2.0.sql @@ -26,19 +26,6 @@ $$ LANGUAGE SQL; -- Some generic utility function used internally. -CREATE FUNCTION get_state(state_code int8) RETURNS TEXT AS -$$ -SELECT - CASE - 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; - CREATE FUNCTION get_cmd_type (cmd_type INTEGER) RETURNS TEXT AS $$ SELECT @@ -129,7 +116,6 @@ CREATE FUNCTION pg_stat_monitor_internal( OUT planid text, OUT query text, OUT query_plan text, - OUT state_code int8, OUT top_queryid text, OUT top_query text, OUT application_name text, @@ -233,9 +219,7 @@ CREATE VIEW pg_stat_monitor AS SELECT cpu_sys_time, wal_records, wal_fpi, - wal_bytes, - state_code, - get_state(state_code) as state + wal_bytes FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid ORDER BY bucket_start_time; RETURN 0; @@ -292,9 +276,6 @@ CREATE VIEW pg_stat_monitor AS SELECT wal_records, wal_fpi, wal_bytes, - state_code, - get_state(state_code) as state, - -- PostgreSQL-13 Specific Coulumns plans_calls FROM pg_stat_monitor_internal(TRUE) p, pg_database d WHERE dbid = oid @@ -352,8 +333,6 @@ CREATE VIEW pg_stat_monitor AS SELECT wal_records, wal_fpi, wal_bytes, - state_code, - get_state(state_code) as state, -- PostgreSQL-14 Specific Columns plans_calls, diff --git a/pg_stat_monitor.c b/pg_stat_monitor.c index 118da37..9147d67 100644 --- a/pg_stat_monitor.c +++ b/pg_stat_monitor.c @@ -26,7 +26,7 @@ PG_MODULE_MAGIC; #define BUILD_VERSION "1.1.1" -#define PG_STAT_STATEMENTS_COLS 53 /* maximum of above */ +#define PG_STAT_STATEMENTS_COLS 52 /* maximum of above */ #define PGSM_TEXT_FILE PGSTAT_STAT_PERMANENT_DIRECTORY "pg_stat_monitor_query" #define roundf(x,d) ((floor(((x)*pow(10,d))+.5))/pow(10,d)) @@ -463,22 +463,6 @@ pgss_post_parse_analyze(ParseState *pstate, Query *query) */ if (query->queryId == UINT64CONST(0)) query->queryId = UINT64CONST(1); - - if (jstate.clocations_count > 0) - pgss_store(query->queryId, /* query id */ - pstate->p_sourcetext, /* query */ - query->stmt_location, /* query location */ - query->stmt_len, /* query length */ - NULL, /* PlanInfo */ - query->commandType, /* CmdType */ - NULL, /* SysInfo */ - NULL, /* ErrorInfo */ - 0, /* totaltime */ - 0, /* rows */ - NULL, /* bufusage */ - NULL, /* walusage */ - &jstate, /* JumbleState */ - PGSS_PARSE); /* pgssStoreKind */ } #endif @@ -521,20 +505,6 @@ pgss_ExecutorStart(QueryDesc *queryDesc, int eflags) #endif MemoryContextSwitchTo(oldcxt); } - pgss_store(queryDesc->plannedstmt->queryId, /* query id */ - queryDesc->sourceText, /* query text */ - queryDesc->plannedstmt->stmt_location, /* query location */ - queryDesc->plannedstmt->stmt_len, /* query length */ - NULL, /* PlanInfo */ - queryDesc->operation, /* CmdType */ - NULL, /* SysInfo */ - NULL, /* ErrorInfo */ - 0, /* totaltime */ - 0, /* rows */ - NULL, /* bufusage */ - NULL, /* walusage */ - NULL, /* JumbleState */ - PGSS_EXEC); /* pgssStoreKind */ } } @@ -1657,7 +1627,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) elog(ERROR, "pg_stat_monitor: return type must be a row type"); - if (tupdesc->natts != 51) + if (tupdesc->natts != 50) elog(ERROR, "pg_stat_monitor: incorrect number of output arguments, required %d", tupdesc->natts); tupstore = tuplestore_begin_heap(true, false, work_mem); @@ -1802,11 +1772,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, values[i++] = CStringGetTextDatum(""); } - - /* state at column number 8 */ - values[i++] = Int64GetDatumFast(tmp.state); - - /* parentid at column number 9 */ + /* parentid at column number 8 */ if (tmp.info.parentid != UINT64CONST(0)) { snprintf(parentid_txt, 32, "%08lX", tmp.info.parentid); @@ -1819,7 +1785,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo, nulls[i++] = true; } - /* application_name at column number 9 */ + /* application_name at column number 10 */ if (strlen(tmp.info.application_name) > 0) values[i++] = CStringGetTextDatum(tmp.info.application_name); else diff --git a/regression/expected/application_name.out b/regression/expected/application_name.out index f170fec..969a6a4 100644 --- a/regression/expected/application_name.out +++ b/regression/expected/application_name.out @@ -12,12 +12,11 @@ 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 - SELECT query,application_name FROM pg_stat_monitor ORDER BY query COLLATE "C" | pg_regress/application_name -(3 rows) + query | application_name +--------------------------------+----------------------------- + SELECT 1 AS num | pg_regress/application_name + SELECT pg_stat_monitor_reset() | pg_regress/application_name +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/application_name_unique.out b/regression/expected/application_name_unique.out index 3494efd..c34e033 100644 --- a/regression/expected/application_name_unique.out +++ b/regression/expected/application_name_unique.out @@ -20,15 +20,14 @@ SELECT 1 AS num; (1 row) SELECT query,application_name FROM pg_stat_monitor ORDER BY query, application_name COLLATE "C"; - query | application_name --------------------------------------------------------------------------------------------------+------------------------------------ - SELECT 1 AS num | naeem - SELECT 1 AS num | psql - SELECT pg_stat_monitor_reset() | pg_regress/application_name_unique - SELECT query,application_name FROM pg_stat_monitor ORDER BY query, application_name COLLATE "C" | psql - Set application_name = 'naeem' | naeem - Set application_name = 'psql' | psql -(6 rows) + query | application_name +--------------------------------+------------------------------------ + SELECT 1 AS num | naeem + SELECT 1 AS num | psql + SELECT pg_stat_monitor_reset() | pg_regress/application_name_unique + Set application_name = 'naeem' | naeem + Set application_name = 'psql' | psql +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/basic.out b/regression/expected/basic.out index 8289ecb..208fc96 100644 --- a/regression/expected/basic.out +++ b/regression/expected/basic.out @@ -12,12 +12,11 @@ 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() - SELECT query FROM pg_stat_monitor ORDER BY query COLLATE "C" -(3 rows) +(2 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 2c6fc66..2981c8f 100644 --- a/regression/expected/cmd_type.out +++ b/regression/expected/cmd_type.out @@ -24,20 +24,19 @@ 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 - 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 = 2 | 2 | UPDATE -(11 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 + TRUNCATE t1 | 0 | + UPDATE t1 SET a = 2 | 2 | UPDATE +(10 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/counters.out b/regression/expected/counters.out index 4c89893..a0c8117 100644 --- a/regression/expected/counters.out +++ b/regression/expected/counters.out @@ -41,8 +41,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 | 4 SELECT pg_stat_monitor_reset() | 1 - SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C" | 1 -(3 rows) +(2 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -76,7 +75,7 @@ SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; n := n + 1; +| end loop; +| end $$ | -(4 rows) +(3 rows) DROP TABLE t1; DROP TABLE t2; diff --git a/regression/expected/counters_1.out b/regression/expected/counters_1.out new file mode 100644 index 0000000..6b1aae7 --- /dev/null +++ b/regression/expected/counters_1.out @@ -0,0 +1,83 @@ +CREATE EXTENSION pg_stat_monitor; +Set pg_stat_monitor.pgsm_track='all'; +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +CREATE TABLE t1 (a INTEGER); +CREATE TABLE t2 (b INTEGER); +CREATE TABLE t3 (c INTEGER); +CREATE TABLE t4 (d INTEGER); +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + a | b | c | d +---+---+---+--- +(0 rows) + +SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | calls +---------------------------------------------------------------------------------+------- + 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 pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +do $$ +declare + n integer:= 1; +begin + loop + PERFORM a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a; + exit when n = 1000; + n := n + 1; + end loop; +end $$; +SELECT query,calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; + query | calls +---------------------------------------------------------------------------------------------------+------- + 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 + do $$ +| 1 + declare +| + n integer:= 1; +| + begin +| + loop +| + PERFORM a,b,c,d FROM t1, t2, t3, t4 WHERE t1.a = t2.b AND t3.c = t4.d ORDER BY a;+| + exit when n = 1000; +| + n := n + 1; +| + end loop; +| + end $$ | +(3 rows) + +DROP TABLE t1; +DROP TABLE t2; +DROP TABLE t3; +DROP TABLE t4; +DROP EXTENSION pg_stat_monitor; diff --git a/regression/expected/database.out b/regression/expected/database.out index 12c5055..b84a2e0 100644 --- a/regression/expected/database.out +++ b/regression/expected/database.out @@ -28,13 +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() -(4 rows) +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/database_1.out b/regression/expected/database_1.out new file mode 100644 index 0000000..7062272 --- /dev/null +++ b/regression/expected/database_1.out @@ -0,0 +1,53 @@ +CREATE EXTENSION pg_stat_monitor; +CREATE DATABASE db1; +CREATE DATABASE db2; +\c db1 +CREATE TABLE t1 (a int); +CREATE TABLE t2 (b int); +\c db2 +CREATE TABLE t3 (c int); +CREATE TABLE t4 (d int); +\c contrib_regression +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +\c db1 +SELECT * FROM t1,t2 WHERE t1.a = t2.b; + a | b +---+--- +(0 rows) + +\c db2 +SELECT * FROM t3,t4 WHERE t3.c = t4.d; + c | d +---+--- +(0 rows) + +\c contrib_regression +SELECT datname, query FROM pg_stat_monitor ORDER BY query COLLATE "C"; + 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 pg_stat_monitor_reset() +(3 rows) + +SELECT pg_stat_monitor_reset(); + pg_stat_monitor_reset +----------------------- + +(1 row) + +\c db1 +DROP TABLE t1; +DROP TABLE t2; +\c db2 +DROP TABLE t3; +DROP TABLE t4; +\c contrib_regression +DROP DATABASE db1; +DROP DATABASE db2; +DROP EXTENSION pg_stat_monitor; diff --git a/regression/expected/error.out b/regression/expected/error.out index 7a61786..74fb6cc 100644 --- a/regression/expected/error.out +++ b/regression/expected/error.out @@ -21,22 +21,21 @@ RAISE WARNING 'warning message'; END $$; WARNING: warning message SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel; - query | elevel | sqlcode | message ------------------------------------------------------------------------------------------------+--------+---------+----------------------------------- - ELECET * FROM unknown; | 21 | 42601 | syntax error at or near "ELECET" - SELECT * FROM unknown; | 21 | 42P01 | relation "unknown" does not exist - SELECT 1/0; | 21 | 22012 | division by zero - SELECT pg_stat_monitor_reset() | 0 | | - SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel | 0 | | - do $$ +| 0 | | - BEGIN +| | | - RAISE WARNING 'warning message'; +| | | - END $$ | | | - do $$ +| 19 | 01000 | warning message - BEGIN +| | | - RAISE WARNING 'warning message'; +| | | - END $$; | | | -(7 rows) + 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 $$ +| 0 | | + BEGIN +| | | + RAISE WARNING 'warning message';+| | | + END $$ | | | + 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/error_insert.out b/regression/expected/error_insert.out index aa64f57..66df8cd 100644 --- a/regression/expected/error_insert.out +++ b/regression/expected/error_insert.out @@ -17,14 +17,13 @@ ERROR: duplicate key value violates unique constraint "company_pkey" DETAIL: Key (id)=(1) already exists. Drop Table if exists Company; SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel; - query | elevel | sqlcode | message ------------------------------------------------------------------------------------------------+--------+---------+--------------------------------------------------------------- - Drop Table if exists Company | 0 | | - INSERT INTO Company(ID, Name) VALUES (1, 'Percona') | 0 | | - INSERT INTO Company(ID, Name) VALUES (1, 'Percona'); | 21 | 23505 | duplicate key value violates unique constraint "company_pkey" - SELECT pg_stat_monitor_reset() | 0 | | - SELECT query, elevel, sqlcode, message FROM pg_stat_monitor ORDER BY query COLLATE "C",elevel | 0 | | -(5 rows) + query | elevel | sqlcode | message +-------------------------------------------------------+--------+---------+--------------------------------------------------------------- + Drop Table if exists Company | 0 | | + INSERT INTO Company(ID, Name) VALUES (1, 'Percona') | 0 | | + INSERT INTO Company(ID, Name) VALUES (1, 'Percona'); | 20 | 23505 | duplicate key value violates unique constraint "company_pkey" + SELECT pg_stat_monitor_reset() | 0 | | +(4 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/histogram_1.out b/regression/expected/histogram_1.out index 9a0eb91..1f638ef 100644 --- a/regression/expected/histogram_1.out +++ b/regression/expected/histogram_1.out @@ -45,14 +45,13 @@ INFO: Sleep 5 seconds (1 row) SELECT substr(query, 0,50) as query, calls, resp_calls FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | calls | resp_calls ----------------------------------------------------+-------+----------------------- - SELECT pg_sleep(i) | 5 | {0,0,0,0,0,0,3,2,0,0} - SELECT pg_stat_monitor_reset() | 1 | {1,0,0,0,0,0,0,0,0,0} - SELECT substr(query, 0,50) as query, calls, resp_ | 1 | {1,0,0,0,0,0,0,0,0,0} - Set pg_stat_monitor.pgsm_track='all' | 1 | {1,0,0,0,0,0,0,0,0,0} - select run_pg_sleep(5) | 1 | {0,0,0,0,0,0,0,0,1,0} -(5 rows) + query | calls | resp_calls +--------------------------------------+-------+----------------------- + SELECT pg_sleep(i) | 5 | {0,0,0,0,0,0,3,2,0,0} + SELECT pg_stat_monitor_reset() | 1 | {1,0,0,0,0,0,0,0,0,0} + Set pg_stat_monitor.pgsm_track='all' | 1 | {1,0,0,0,0,0,0,0,0,0} + select run_pg_sleep(5) | 1 | {0,0,0,0,0,0,0,0,1,0} +(4 rows) select * from generate_histogram(); range | freq | bar diff --git a/regression/expected/relations.out b/regression/expected/relations.out index 6c17a47..442f3ea 100644 --- a/regression/expected/relations.out +++ b/regression/expected/relations.out @@ -37,15 +37,14 @@ SELECT * FROM foo1, foo2, foo3, foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+--------------------------------------------------- - SELECT * FROM foo1 | {public.foo1} - SELECT * FROM foo1, foo2 | {public.foo1,public.foo2} - SELECT * FROM foo1, foo2, foo3 | {public.foo1,public.foo2,public.foo3} - SELECT * FROM foo1, foo2, foo3, foo4 | {public.foo1,public.foo2,public.foo3,public.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +--------------------------------------+--------------------------------------------------- + SELECT * FROM foo1 | {public.foo1} + SELECT * FROM foo1, foo2 | {public.foo1,public.foo2} + SELECT * FROM foo1, foo2, foo3 | {public.foo1,public.foo2,public.foo3} + SELECT * FROM foo1, foo2, foo3, foo4 | {public.foo1,public.foo2,public.foo3,public.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -89,15 +88,14 @@ SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+-------------------------------------------------- - SELECT * FROM sch1.foo1 | {sch1.foo1} - SELECT * FROM sch1.foo1, sch2.foo2 | {sch1.foo1,sch2.foo2} - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3 | {sch1.foo1,sch2.foo2,sch3.foo3} - SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4 | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +----------------------------------------------------------+------------------------------------------- + SELECT * FROM sch1.foo1 | {sch1.foo1} + SELECT * FROM sch1.foo1, sch2.foo2 | {sch1.foo1,sch2.foo2} + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3 | {sch1.foo1,sch2.foo2,sch3.foo3} + SELECT * FROM sch1.foo1, sch2.foo2, sch3.foo3, sch4.foo4 | {sch1.foo1,sch2.foo2,sch3.foo3,sch4.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -122,13 +120,12 @@ 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() | - SELECT query, relations from pg_stat_monitor ORDER BY query | {public.pg_stat_monitor*,pg_catalog.pg_database} -(4 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() | +(3 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset @@ -168,15 +165,14 @@ SELECT * FROM v1,v2,v3,v4; (0 rows) SELECT query, relations from pg_stat_monitor ORDER BY query collate "C"; - query | relations --------------------------------------------------------------------------+----------------------------------------------------------------------------------------------- - SELECT * FROM v1 | {public.v1*,public.foo1} - SELECT * FROM v1,v2 | {public.v1*,public.foo1,public.v2*,public.foo2} - SELECT * FROM v1,v2,v3 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} - SELECT * FROM v1,v2,v3,v4 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} - SELECT pg_stat_monitor_reset() | - SELECT query, relations from pg_stat_monitor ORDER BY query collate "C" | {public.pg_stat_monitor*,pg_catalog.pg_database} -(6 rows) + query | relations +--------------------------------+----------------------------------------------------------------------------------------------- + SELECT * FROM v1 | {public.v1*,public.foo1} + SELECT * FROM v1,v2 | {public.v1*,public.foo1,public.v2*,public.foo2} + SELECT * FROM v1,v2,v3 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3} + SELECT * FROM v1,v2,v3,v4 | {public.v1*,public.foo1,public.v2*,public.foo2,public.v3*,public.foo3,public.v4*,public.foo4} + SELECT pg_stat_monitor_reset() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/rows.out b/regression/expected/rows.out index b648175..9072bcf 100644 --- a/regression/expected/rows.out +++ b/regression/expected/rows.out @@ -8541,15 +8541,14 @@ SELECt * FROM t2 WHERE b % 2 = 0; (2500 rows) SELECT query, rows_retrieved FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | rows_retrieved -------------------------------------------------------------------------------+---------------- - SELECT * FROM t1 | 1000 - SELECT * FROM t1 LIMIT 10 | 10 - SELECT * FROM t2 | 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 % 2 = 0 | 2500 -(6 rows) + query | rows_retrieved +-----------------------------------+---------------- + SELECT * FROM t1 | 1000 + SELECT * FROM t1 LIMIT 10 | 10 + SELECT * FROM t2 | 5000 + SELECT pg_stat_monitor_reset() | 1 + SELECt * FROM t2 WHERE b % 2 = 0 | 2500 +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/regression/expected/tags.out b/regression/expected/tags.out index 76a1ff4..945540e 100644 --- a/regression/expected/tags.out +++ b/regression/expected/tags.out @@ -17,8 +17,7 @@ SELECT query, comments FROM pg_stat_monitor ORDER BY query COLLATE "C"; --------------------------------------------------------------------------+---------------------------------------------------------- SELECT 1 AS num /* { "application", psql_app, "real_ip", 192.168.1.3) */ | /* { "application", psql_app, "real_ip", 192.168.1.3) */ SELECT pg_stat_monitor_reset() | - SELECT query, comments FROM pg_stat_monitor ORDER BY query COLLATE "C" | -(3 rows) +(2 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 c943685..928c9aa 100644 --- a/regression/expected/top_query.out +++ b/regression/expected/top_query.out @@ -24,24 +24,23 @@ SELECT add2(1,2); (1 row) SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C"; - query | top_query --------------------------------------------------------------------------+------------------ - (select $1 + $2) | SELECT add2(1,2) - 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 add2(1,2) | - SELECT pg_stat_monitor_reset() | - SELECT query, top_query FROM pg_stat_monitor ORDER BY query COLLATE "C" | -(6 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() | +(5 rows) SELECT pg_stat_monitor_reset(); pg_stat_monitor_reset diff --git a/t/expected/001_settings_default.out b/t/expected/001_settings_default.out index 9d1d6ad..3719c03 100644 --- a/t/expected/001_settings_default.out +++ b/t/expected/001_settings_default.out @@ -26,12 +26,11 @@ SELECT * from pg_stat_monitor_settings; (15 rows) select datname, substr(query,0,100) as query, calls from pg_stat_monitor order by datname, query, calls desc Limit 20; - datname | query | calls -----------+-----------------------------------------------------------------------------------------------------+------- - postgres | SELECT * from pg_stat_monitor_settings | 1 - postgres | SELECT pg_stat_monitor_reset() | 1 - postgres | select datname, substr(query,0,100) as query, calls from pg_stat_monitor order by datname, query, c | 1 -(3 rows) + datname | query | calls +----------+----------------------------------------+------- + postgres | SELECT * from pg_stat_monitor_settings | 1 + postgres | SELECT pg_stat_monitor_reset() | 1 +(2 rows) SELECT * from pg_stat_monitor_settings; name | value | default_value | description | minimum | maximum | options | restart