1- /* pg_store_plans/pg_store_plans--1.9.sql */
1+ /*
2+ * pg_store_plans/pg_store_plans--1.9.sql
3+ *
4+ * 확장 설치용 SQL 스크립트 (버전 1.9)
5+ *
6+ * - 주요 함수 및 뷰 생성
7+ * - PostgreSQL 17 이상/미만 버전별 함수(분기 처리) 생성
8+ * - 권한 부여
9+ */
210
3- -- complain if script is sourced in psql, rather than via CREATE EXTENSION
11+ -- psql에서 직접 실행되는 것을 방지 (CREATE EXTENSION을 통해서만 실행)
412\echo Use " CREATE EXTENSION pg_store_plans" to load this file. \quit
513
6- -- - Define pg_store_plans_info
14+ -- - pg_store_plans_info 함수 및 뷰 정의 (통계 정보 제공)
715CREATE FUNCTION pg_store_plans_info (
816 OUT dealloc bigint ,
917 OUT stats_reset timestamp with time zone
@@ -17,7 +25,7 @@ CREATE VIEW pg_store_plans_info AS
1725
1826GRANT SELECT ON pg_store_plans_info TO PUBLIC;
1927
20- -- Register functions.
28+ -- 주요 기능 함수 등록 (플랜 리셋, 쿼리 축약, 정규화, 다양한 포맷 변환 등)
2129CREATE FUNCTION pg_store_plans_reset ()
2230RETURNS void
2331AS ' MODULE_PATHNAME'
@@ -57,48 +65,95 @@ RETURNS oid
5765AS ' MODULE_PATHNAME'
5866LANGUAGE C
5967RETURNS NULL ON NULL INPUT PARALLEL SAFE;
60- CREATE FUNCTION pg_store_plans (
61- OUT userid oid ,
62- OUT dbid oid ,
63- OUT queryid int8,
64- OUT planid int8,
65- OUT plan text ,
66- OUT calls int8,
67- OUT total_time float8,
68- OUT min_time float8,
69- OUT max_time float8,
70- OUT mean_time float8,
71- OUT stddev_time float8,
72- OUT rows int8,
73- OUT shared_blks_hit int8,
74- OUT shared_blks_read int8,
75- OUT shared_blks_dirtied int8,
76- OUT shared_blks_written int8,
77- OUT local_blks_hit int8,
78- OUT local_blks_read int8,
79- OUT local_blks_dirtied int8,
80- OUT local_blks_written int8,
81- OUT temp_blks_read int8,
82- OUT temp_blks_written int8,
83- OUT shared_blk_read_time float8,
84- OUT shared_blk_write_time float8,
85- OUT local_blk_read_time float8,
86- OUT local_blk_write_time float8,
87- OUT temp_blk_read_time float8,
88- OUT temp_blk_write_time float8,
89- OUT first_call timestamptz ,
90- OUT last_call timestamptz
91- )
92- RETURNS SETOF record
93- AS ' MODULE_PATHNAME' , ' pg_store_plans_1_9'
94- LANGUAGE C
95- VOLATILE PARALLEL SAFE;
9668
97- -- Register a view on the function for ease of use.
69+ -- PostgreSQL 버전에 따라 메인 함수 생성 (17 이상/미만 분기)
70+ DO
71+ $$
72+ BEGIN
73+ IF (SELECT split_part(setting,' .' ,1 ) FROM pg_settings WHERE name = ' server_version' )::int >= 17 THEN
74+ -- PostgreSQL 17 이상: shared/local 블록 시간 컬럼 분리
75+ CREATE FUNCTION pg_store_plans (
76+ OUT userid oid ,
77+ OUT dbid oid ,
78+ OUT queryid int8,
79+ OUT planid int8,
80+ OUT plan text ,
81+ OUT calls int8,
82+ OUT total_time float8,
83+ OUT min_time float8,
84+ OUT max_time float8,
85+ OUT mean_time float8,
86+ OUT stddev_time float8,
87+ OUT rows int8,
88+ OUT shared_blks_hit int8,
89+ OUT shared_blks_read int8,
90+ OUT shared_blks_dirtied int8,
91+ OUT shared_blks_written int8,
92+ OUT local_blks_hit int8,
93+ OUT local_blks_read int8,
94+ OUT local_blks_dirtied int8,
95+ OUT local_blks_written int8,
96+ OUT temp_blks_read int8,
97+ OUT temp_blks_written int8,
98+ OUT shared_blk_read_time float8,
99+ OUT shared_blk_write_time float8,
100+ OUT local_blk_read_time float8,
101+ OUT local_blk_write_time float8,
102+ OUT temp_blk_read_time float8,
103+ OUT temp_blk_write_time float8,
104+ OUT first_call timestamptz ,
105+ OUT last_call timestamptz
106+ )
107+ RETURNS SETOF record
108+ AS ' MODULE_PATHNAME' , ' pg_store_plans_1_9'
109+ LANGUAGE C
110+ VOLATILE PARALLEL SAFE;
111+ ELSE
112+ -- PostgreSQL 17 미만: blk_read_time, blk_write_time 사용
113+ CREATE FUNCTION pg_store_plans (
114+ OUT userid oid ,
115+ OUT dbid oid ,
116+ OUT queryid int8,
117+ OUT planid int8,
118+ OUT plan text ,
119+ OUT calls int8,
120+ OUT total_time float8,
121+ OUT min_time float8,
122+ OUT max_time float8,
123+ OUT mean_time float8,
124+ OUT stddev_time float8,
125+ OUT rows int8,
126+ OUT shared_blks_hit int8,
127+ OUT shared_blks_read int8,
128+ OUT shared_blks_dirtied int8,
129+ OUT shared_blks_written int8,
130+ OUT local_blks_hit int8,
131+ OUT local_blks_read int8,
132+ OUT local_blks_dirtied int8,
133+ OUT local_blks_written int8,
134+ OUT temp_blks_read int8,
135+ OUT temp_blks_written int8,
136+ OUT blk_read_time float8,
137+ OUT blk_write_time float8,
138+ OUT temp_blk_read_time float8,
139+ OUT temp_blk_write_time float8,
140+ OUT first_call timestamptz ,
141+ OUT last_call timestamptz
142+ )
143+ RETURNS SETOF record
144+ AS ' MODULE_PATHNAME' , ' pg_store_plans_1_7'
145+ LANGUAGE C
146+ VOLATILE PARALLEL SAFE;
147+ END IF;
148+ END
149+ $$ LANGUAGE plpgsql;
150+
151+ -- 메인 함수에 대한 뷰 생성 (사용 편의성 제공)
98152CREATE VIEW pg_store_plans AS
99153 SELECT * FROM pg_store_plans();
100154
155+ -- 모든 사용자에게 SELECT 권한 부여
101156GRANT SELECT ON pg_store_plans TO PUBLIC;
102157
103- -- Don't want this to be available to non-superusers.
158+ -- superuser가 아닌 사용자에게는 리셋 함수 권한 제한
104159REVOKE ALL ON FUNCTION pg_store_plans_reset() FROM PUBLIC;
0 commit comments