mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +03:00 
			
		
		
		
	This is preliminary patch. It adds NOT NULL checking for the result of pg_stat_statements_reset() function. It is needed for upcoming patch "Track statement entry timestamp" that will change the result type of this function to the timestamp of a reset performed. Discussion: https://postgr.es/m/flat/72e80e7b160a6eb189df9ef6f068cce3765d37f8.camel%40moonset.ru Author: Andrei Zubkov Reviewed-by: Julien Rouhaud, Hayato Kuroda, Yuki Seino, Chengxi Sun Reviewed-by: Anton Melnikov, Darren Rush, Michael Paquier, Sergei Kornilov Reviewed-by: Alena Rybakina, Andrei Lepikhov
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PL/PgSQL
		
	
	
	
	
	
| --
 | |
| -- SELECT statements
 | |
| --
 | |
| 
 | |
| CREATE EXTENSION pg_stat_statements;
 | |
| SET pg_stat_statements.track_utility = FALSE;
 | |
| SET pg_stat_statements.track_planning = TRUE;
 | |
| SELECT pg_stat_statements_reset() IS NOT NULL AS t;
 | |
| 
 | |
| --
 | |
| -- simple and compound statements
 | |
| --
 | |
| SELECT 1 AS "int";
 | |
| 
 | |
| SELECT 'hello'
 | |
|   -- multiline
 | |
|   AS "text";
 | |
| 
 | |
| SELECT 'world' AS "text";
 | |
| 
 | |
| -- transaction
 | |
| BEGIN;
 | |
| SELECT 1 AS "int";
 | |
| SELECT 'hello' AS "text";
 | |
| COMMIT;
 | |
| 
 | |
| -- compound transaction
 | |
| BEGIN \;
 | |
| SELECT 2.0 AS "float" \;
 | |
| SELECT 'world' AS "text" \;
 | |
| COMMIT;
 | |
| 
 | |
| -- compound with empty statements and spurious leading spacing
 | |
| \;\;   SELECT 3 + 3 \;\;\;   SELECT ' ' || ' !' \;\;   SELECT 1 + 4 \;;
 | |
| 
 | |
| -- non ;-terminated statements
 | |
| SELECT 1 + 1 + 1 AS "add" \gset
 | |
| SELECT :add + 1 + 1 AS "add" \;
 | |
| SELECT :add + 1 + 1 AS "add" \gset
 | |
| 
 | |
| -- set operator
 | |
| SELECT 1 AS i UNION SELECT 2 ORDER BY i;
 | |
| 
 | |
| -- ? operator
 | |
| select '{"a":1, "b":2}'::jsonb ? 'b';
 | |
| 
 | |
| -- cte
 | |
| WITH t(f) AS (
 | |
|   VALUES (1.0), (2.0)
 | |
| )
 | |
|   SELECT f FROM t ORDER BY f;
 | |
| 
 | |
| -- prepared statement with parameter
 | |
| PREPARE pgss_test (int) AS SELECT $1, 'test' LIMIT 1;
 | |
| EXECUTE pgss_test(1);
 | |
| DEALLOCATE pgss_test;
 | |
| 
 | |
| SELECT calls, rows, query FROM pg_stat_statements ORDER BY query COLLATE "C";
 | |
| SELECT pg_stat_statements_reset() IS NOT NULL AS t;
 | |
| 
 | |
| --
 | |
| -- queries with locking clauses
 | |
| --
 | |
| CREATE TABLE pgss_a (id integer PRIMARY KEY);
 | |
| CREATE TABLE pgss_b (id integer PRIMARY KEY, a_id integer REFERENCES pgss_a);
 | |
| 
 | |
| SELECT pg_stat_statements_reset() IS NOT NULL AS t;
 | |
| 
 | |
| -- control query
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id;
 | |
| 
 | |
| -- test range tables
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_a;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_b;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_a, pgss_b; -- matches plain "FOR UPDATE"
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE OF pgss_b, pgss_a;
 | |
| 
 | |
| -- test strengths
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR NO KEY UPDATE;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR SHARE;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR KEY SHARE;
 | |
| 
 | |
| -- test wait policies
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE NOWAIT;
 | |
| SELECT * FROM pgss_a JOIN pgss_b ON pgss_b.a_id = pgss_a.id FOR UPDATE SKIP LOCKED;
 | |
| 
 | |
| SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C";
 | |
| 
 | |
| DROP TABLE pgss_a, pgss_b CASCADE;
 | |
| 
 | |
| --
 | |
| -- access to pg_stat_statements_info view
 | |
| --
 | |
| SELECT pg_stat_statements_reset() IS NOT NULL AS t;
 | |
| SELECT dealloc FROM pg_stat_statements_info;
 | |
| 
 | |
| -- FROM [ONLY]
 | |
| CREATE TABLE tbl_inh(id integer);
 | |
| CREATE TABLE tbl_inh_1() INHERITS (tbl_inh);
 | |
| INSERT INTO tbl_inh_1 SELECT 1;
 | |
| 
 | |
| SELECT * FROM tbl_inh;
 | |
| SELECT * FROM ONLY tbl_inh;
 | |
| 
 | |
| SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FROM%tbl_inh%';
 | |
| 
 | |
| -- WITH TIES
 | |
| CREATE TABLE limitoption AS SELECT 0 AS val FROM generate_series(1, 10);
 | |
| SELECT *
 | |
| FROM limitoption
 | |
| WHERE val < 2
 | |
| ORDER BY val
 | |
| FETCH FIRST 2 ROWS WITH TIES;
 | |
| 
 | |
| SELECT *
 | |
| FROM limitoption
 | |
| WHERE val < 2
 | |
| ORDER BY val
 | |
| FETCH FIRST 2 ROW ONLY;
 | |
| 
 | |
| SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%FETCH FIRST%';
 | |
| 
 | |
| -- GROUP BY [DISTINCT]
 | |
| SELECT a, b, c
 | |
| FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c)
 | |
| GROUP BY ROLLUP(a, b), rollup(a, c)
 | |
| ORDER BY a, b, c;
 | |
| SELECT a, b, c
 | |
| FROM (VALUES (1, 2, 3), (4, NULL, 6), (7, 8, 9)) AS t (a, b, c)
 | |
| GROUP BY DISTINCT ROLLUP(a, b), rollup(a, c)
 | |
| ORDER BY a, b, c;
 | |
| 
 | |
| SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%GROUP BY%ROLLUP%';
 | |
| 
 | |
| -- GROUPING SET agglevelsup
 | |
| SELECT (
 | |
|   SELECT (
 | |
|     SELECT GROUPING(a,b) FROM (VALUES (1)) v2(c)
 | |
|   ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b)
 | |
| ) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f);
 | |
| SELECT (
 | |
|   SELECT (
 | |
|     SELECT GROUPING(e,f) FROM (VALUES (1)) v2(c)
 | |
|   ) FROM (VALUES (1,2)) v1(a,b) GROUP BY (a,b)
 | |
| ) FROM (VALUES(6,7)) v3(e,f) GROUP BY ROLLUP(e,f);
 | |
| 
 | |
| SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%SELECT GROUPING%';
 | |
| SELECT pg_stat_statements_reset() IS NOT NULL AS t;
 |