Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ EXTENSION = pg_store_plans

PG_VERSION := $(shell pg_config --version | sed "s/^PostgreSQL //" | sed "s/\.[0-9]*$$//")

DATA = pg_store_plans--1.9.sql
DATA = pg_store_plans--1.9.sql \
pg_store_plans--1.8--1.9.sql

REGRESS = convert store
REGRESS_OPTS = --temp-config=regress.conf
Expand Down
105 changes: 105 additions & 0 deletions pg_store_plans--1.8--1.9.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
/*
* pg_store_plans/pg_store_plans--1.8--1.9.sql
*
* 업그레이드 스크립트: pg_store_plans 1.8 -> 1.9
*
* - 기존 함수 및 뷰 삭제
* - PostgreSQL 17 이상/미만 버전별 함수(분기 처리) 재생성
* - 뷰 생성 및 권한 부여
*/

-- psql에서 직접 실행되는 것을 방지 (CREATE EXTENSION을 통해서만 실행)
\echo Use "CREATE EXTENSION pg_store_plans" to load this file. \quit

-- 기존 뷰 및 함수 삭제 (업그레이드 전 정리)
DROP VIEW pg_store_plans;
DROP FUNCTION pg_store_plans();

-- PostgreSQL 버전에 따라 메인 함수 생성 (17 이상/미만 분기)
DO
$$
BEGIN
IF (SELECT split_part(setting,'.',1) FROM pg_settings WHERE name = 'server_version')::int >= 17 THEN
-- PostgreSQL 17 이상: shared/local 블록 시간 컬럼 분리
CREATE FUNCTION pg_store_plans(
OUT userid oid,
OUT dbid oid,
OUT queryid int8,
OUT planid int8,
OUT plan text,
OUT calls int8,
OUT total_time float8,
OUT min_time float8,
OUT max_time float8,
OUT mean_time float8,
OUT stddev_time float8,
OUT rows int8,
OUT shared_blks_hit int8,
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 shared_blk_read_time float8,
OUT shared_blk_write_time float8,
OUT local_blk_read_time float8,
OUT local_blk_write_time float8,
OUT temp_blk_read_time float8,
OUT temp_blk_write_time float8,
OUT first_call timestamptz,
OUT last_call timestamptz
)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'pg_store_plans_1_9'
LANGUAGE C
VOLATILE PARALLEL SAFE;
ELSE
-- PostgreSQL 17 미만: blk_read_time, blk_write_time 사용
CREATE FUNCTION pg_store_plans(
OUT userid oid,
OUT dbid oid,
OUT queryid int8,
OUT planid int8,
OUT plan text,
OUT calls int8,
OUT total_time float8,
OUT min_time float8,
OUT max_time float8,
OUT mean_time float8,
OUT stddev_time float8,
OUT rows int8,
OUT shared_blks_hit int8,
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 temp_blk_read_time float8,
OUT temp_blk_write_time float8,
OUT first_call timestamptz,
OUT last_call timestamptz
)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'pg_store_plans_1_7'
LANGUAGE C
VOLATILE PARALLEL SAFE;
END IF;
END
$$ LANGUAGE plpgsql;

-- 메인 함수에 대한 뷰 생성 (사용 편의성 제공)
CREATE VIEW pg_store_plans AS
SELECT * FROM pg_store_plans();

-- 모든 사용자에게 SELECT 권한 부여
GRANT SELECT ON pg_store_plans TO PUBLIC;
139 changes: 97 additions & 42 deletions pg_store_plans--1.9.sql
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
/* pg_store_plans/pg_store_plans--1.9.sql */
/*
* pg_store_plans/pg_store_plans--1.9.sql
*
* 확장 설치용 SQL 스크립트 (버전 1.9)
*
* - 주요 함수 및 뷰 생성
* - PostgreSQL 17 이상/미만 버전별 함수(분기 처리) 생성
* - 권한 부여
*/

-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-- psql에서 직접 실행되는 것을 방지 (CREATE EXTENSION을 통해서만 실행)
\echo Use "CREATE EXTENSION pg_store_plans" to load this file. \quit

--- Define pg_store_plans_info
--- pg_store_plans_info 함수 및 뷰 정의 (통계 정보 제공)
CREATE FUNCTION pg_store_plans_info(
OUT dealloc bigint,
OUT stats_reset timestamp with time zone
Expand All @@ -17,7 +25,7 @@ CREATE VIEW pg_store_plans_info AS

GRANT SELECT ON pg_store_plans_info TO PUBLIC;

-- Register functions.
-- 주요 기능 함수 등록 (플랜 리셋, 쿼리 축약, 정규화, 다양한 포맷 변환 등)
CREATE FUNCTION pg_store_plans_reset()
RETURNS void
AS 'MODULE_PATHNAME'
Expand Down Expand Up @@ -57,48 +65,95 @@ RETURNS oid
AS 'MODULE_PATHNAME'
LANGUAGE C
RETURNS NULL ON NULL INPUT PARALLEL SAFE;
CREATE FUNCTION pg_store_plans(
OUT userid oid,
OUT dbid oid,
OUT queryid int8,
OUT planid int8,
OUT plan text,
OUT calls int8,
OUT total_time float8,
OUT min_time float8,
OUT max_time float8,
OUT mean_time float8,
OUT stddev_time float8,
OUT rows int8,
OUT shared_blks_hit int8,
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 shared_blk_read_time float8,
OUT shared_blk_write_time float8,
OUT local_blk_read_time float8,
OUT local_blk_write_time float8,
OUT temp_blk_read_time float8,
OUT temp_blk_write_time float8,
OUT first_call timestamptz,
OUT last_call timestamptz
)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'pg_store_plans_1_9'
LANGUAGE C
VOLATILE PARALLEL SAFE;

-- Register a view on the function for ease of use.
-- PostgreSQL 버전에 따라 메인 함수 생성 (17 이상/미만 분기)
DO
$$
BEGIN
IF (SELECT split_part(setting,'.',1) FROM pg_settings WHERE name = 'server_version')::int >= 17 THEN
-- PostgreSQL 17 이상: shared/local 블록 시간 컬럼 분리
CREATE FUNCTION pg_store_plans(
OUT userid oid,
OUT dbid oid,
OUT queryid int8,
OUT planid int8,
OUT plan text,
OUT calls int8,
OUT total_time float8,
OUT min_time float8,
OUT max_time float8,
OUT mean_time float8,
OUT stddev_time float8,
OUT rows int8,
OUT shared_blks_hit int8,
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 shared_blk_read_time float8,
OUT shared_blk_write_time float8,
OUT local_blk_read_time float8,
OUT local_blk_write_time float8,
OUT temp_blk_read_time float8,
OUT temp_blk_write_time float8,
OUT first_call timestamptz,
OUT last_call timestamptz
)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'pg_store_plans_1_9'
LANGUAGE C
VOLATILE PARALLEL SAFE;
ELSE
-- PostgreSQL 17 미만: blk_read_time, blk_write_time 사용
CREATE FUNCTION pg_store_plans(
OUT userid oid,
OUT dbid oid,
OUT queryid int8,
OUT planid int8,
OUT plan text,
OUT calls int8,
OUT total_time float8,
OUT min_time float8,
OUT max_time float8,
OUT mean_time float8,
OUT stddev_time float8,
OUT rows int8,
OUT shared_blks_hit int8,
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 temp_blk_read_time float8,
OUT temp_blk_write_time float8,
OUT first_call timestamptz,
OUT last_call timestamptz
)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'pg_store_plans_1_7'
LANGUAGE C
VOLATILE PARALLEL SAFE;
END IF;
END
$$ LANGUAGE plpgsql;

-- 메인 함수에 대한 뷰 생성 (사용 편의성 제공)
CREATE VIEW pg_store_plans AS
SELECT * FROM pg_store_plans();

-- 모든 사용자에게 SELECT 권한 부여
GRANT SELECT ON pg_store_plans TO PUBLIC;

-- Don't want this to be available to non-superusers.
-- superuser가 아닌 사용자에게는 리셋 함수 권한 제한
REVOKE ALL ON FUNCTION pg_store_plans_reset() FROM PUBLIC;
Loading