mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
pg_stat_statements: Add more tests with temp tables and namespaces
These tests provide coverage for RangeTblEntry and how query jumbling works with search_path, as well as the case where relations are re-created, generating a different query ID as the relation OID is used in the computation. A patch is under discussion to switch to a different approach based on the relation name, and there was no test coverage for this area, including how queries are currently grouped with search_path. This is useful to track how the situation changes between HEAD and any patches proposed. Christoph has proposed the test with ON COMMIT DROP temporary tables, and I have written the second part. Author: Christoph Berg <myon@debian.org> Author: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/Z9iWXKGwkm8RAC93@msg.df7cb.de
This commit is contained in:
@ -148,3 +148,72 @@ SELECT (
|
||||
|
||||
SELECT COUNT(*) FROM pg_stat_statements WHERE query LIKE '%SELECT GROUPING%';
|
||||
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
|
||||
|
||||
-- Temporary table with same name, re-created.
|
||||
BEGIN;
|
||||
CREATE TEMP TABLE temp_t (id int) ON COMMIT DROP;
|
||||
SELECT * FROM temp_t;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
CREATE TEMP TABLE temp_t (id int) ON COMMIT DROP;
|
||||
SELECT * FROM temp_t;
|
||||
COMMIT;
|
||||
SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
||||
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
|
||||
|
||||
-- search_path with various schemas and temporary tables
|
||||
CREATE SCHEMA pgss_schema_1;
|
||||
CREATE SCHEMA pgss_schema_2;
|
||||
-- Same attributes.
|
||||
CREATE TABLE pgss_schema_1.tab_search_same (a int, b int);
|
||||
CREATE TABLE pgss_schema_2.tab_search_same (a int, b int);
|
||||
CREATE TEMP TABLE tab_search_same (a int, b int);
|
||||
-- Different number of attributes, mapping types
|
||||
CREATE TABLE pgss_schema_1.tab_search_diff_1 (a int);
|
||||
CREATE TABLE pgss_schema_2.tab_search_diff_1 (a int, b int);
|
||||
CREATE TEMP TABLE tab_search_diff_1 (a int, b int, c int);
|
||||
-- Same number of attributes, different types
|
||||
CREATE TABLE pgss_schema_1.tab_search_diff_2 (a int);
|
||||
CREATE TABLE pgss_schema_2.tab_search_diff_2 (a text);
|
||||
CREATE TEMP TABLE tab_search_diff_2 (a bigint);
|
||||
-- First permanent schema
|
||||
SET search_path = 'pgss_schema_1';
|
||||
SELECT count(*) FROM tab_search_same;
|
||||
SELECT a, b FROM tab_search_same;
|
||||
SELECT count(*) FROM tab_search_diff_1;
|
||||
SELECT count(*) FROM tab_search_diff_2;
|
||||
SELECT a FROM tab_search_diff_2 AS t1;
|
||||
SELECT a FROM tab_search_diff_2;
|
||||
SELECT a AS a1 FROM tab_search_diff_2;
|
||||
-- Second permanent schema
|
||||
SET search_path = 'pgss_schema_2';
|
||||
SELECT count(*) FROM tab_search_same;
|
||||
SELECT a, b FROM tab_search_same;
|
||||
SELECT count(*) FROM tab_search_diff_1;
|
||||
SELECT count(*) FROM tab_search_diff_2;
|
||||
SELECT a FROM tab_search_diff_2 AS t1;
|
||||
SELECT a FROM tab_search_diff_2;
|
||||
SELECT a AS a1 FROM tab_search_diff_2;
|
||||
-- Temporary schema
|
||||
SET search_path = 'pg_temp';
|
||||
SELECT count(*) FROM tab_search_same;
|
||||
SELECT a, b FROM tab_search_same;
|
||||
SELECT count(*) FROM tab_search_diff_1;
|
||||
SELECT count(*) FROM tab_search_diff_2;
|
||||
SELECT a FROM tab_search_diff_2 AS t1;
|
||||
SELECT a FROM tab_search_diff_2;
|
||||
SELECT a AS a1 FROM tab_search_diff_2;
|
||||
RESET search_path;
|
||||
-- Schema qualifications
|
||||
SELECT count(*) FROM pgss_schema_1.tab_search_same;
|
||||
SELECT a, b FROM pgss_schema_1.tab_search_same;
|
||||
SELECT count(*) FROM pgss_schema_2.tab_search_diff_1;
|
||||
SELECT count(*) FROM pg_temp.tab_search_diff_2;
|
||||
SELECT a FROM pgss_schema_2.tab_search_diff_2 AS t1;
|
||||
SELECT a FROM pgss_schema_2.tab_search_diff_2;
|
||||
SELECT a AS a1 FROM pgss_schema_2.tab_search_diff_2;
|
||||
SELECT calls, query FROM pg_stat_statements ORDER BY query COLLATE "C";
|
||||
DROP SCHEMA pgss_schema_1 CASCADE;
|
||||
DROP SCHEMA pgss_schema_2 CASCADE;
|
||||
DROP TABLE tab_search_same, tab_search_diff_1, tab_search_diff_2;
|
||||
SELECT pg_stat_statements_reset() IS NOT NULL AS t;
|
||||
|
Reference in New Issue
Block a user