mirror of
https://github.com/percona/pg_stat_monitor.git
synced 2026-02-04 14:06:20 +00:00
PG-545: pg_stat_monitor: Same query text should generate same queryid
Regardless of the database or the user, the same query will yield the same query ID. As part of this, a new column, 'pgsm_query_id', is added. * pgsm_query_id: pgsm_query_id has the same data type of int8 as the queryid column. If the incoming SQL command includes any constants, it internally normalizes the query to remove those constant values with placeholders. Otherwise, it uses the query directly to generate the query hash. Since we no longer depend on the server's parse tree mechanism, we can generate the same hash for the same query text for all server versions. Also, it is important to note that the hash being calculated is a database, schema and user independent. So same query text in different databases will generate the same hash. This column is not part of the key; rather, for observability purposes only. * Regression SQL test case pgsm_query_id.sql is added to the SQL regression.
This commit is contained in:
55
regression/sql/pgsm_query_id.sql
Normal file
55
regression/sql/pgsm_query_id.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
CREATE EXTENSION pg_stat_monitor;
|
||||
|
||||
CREATE DATABASE db1;
|
||||
CREATE DATABASE db2;
|
||||
|
||||
\c db1
|
||||
CREATE TABLE t1 (a int);
|
||||
CREATE TABLE t2 (b int);
|
||||
|
||||
CREATE FUNCTION add(integer, integer) RETURNS integer
|
||||
AS 'select $1 + $2;'
|
||||
LANGUAGE SQL
|
||||
IMMUTABLE
|
||||
RETURNS NULL ON NULL INPUT;
|
||||
|
||||
\c db2
|
||||
CREATE TABLE t1 (a int);
|
||||
CREATE TABLE t3 (c int);
|
||||
|
||||
CREATE FUNCTION add(integer, integer) RETURNS integer
|
||||
AS 'select $1 + $2;'
|
||||
LANGUAGE SQL
|
||||
IMMUTABLE
|
||||
RETURNS NULL ON NULL INPUT;
|
||||
|
||||
\c contrib_regression
|
||||
SELECT pg_stat_monitor_reset();
|
||||
\c db1
|
||||
SELECT * FROM t1;
|
||||
SELECT *, ADD(1, 2) FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
\c db2
|
||||
SELECT * FROM t1;
|
||||
SELECT *, ADD(1, 2) FROM t1;
|
||||
SELECT * FROM t3;
|
||||
|
||||
\c contrib_regression
|
||||
SELECT datname, pgsm_query_id, query FROM pg_stat_monitor ORDER BY pgsm_query_id, query, datname;
|
||||
SELECT pg_stat_monitor_reset();
|
||||
|
||||
\c db1
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP FUNCTION ADD;
|
||||
|
||||
\c db2
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t3;
|
||||
DROP FUNCTION ADD;
|
||||
|
||||
\c contrib_regression
|
||||
DROP DATABASE db1;
|
||||
DROP DATABASE db2;
|
||||
DROP EXTENSION pg_stat_monitor;
|
||||
Reference in New Issue
Block a user