postgresql query 모음


Intro

postgresql DB를 서비스를 운영하면서 사용한 쿼리들을 나중에 필요할 수 있어 기록합니다.

쿼리 모음

  • 프로그램 갯수 조회
SELECT * 
FROM TB_SM_PGM TSP
WHERE USE_YN = 'Y'
ORDER BY PGM_ID
  • 테이블 조회
SELECT c.relname
FROM pg_catalog.pg_namespace n 
join pg_catalog.pg_class c on c.relnamespace=n.oid 
WHERE n.nspname IN ('gtts')
AND c.relkind = 'r' 
ORDER BY relname
  • 펑션 조회
SELECT p.proname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
WHERE n.nspname = 'gtts'
AND p.proname LIKE 'fn\_%' OR p.proname LIKE 'sp\_%'
ORDER BY proname

SELECT p.proname, *
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid
WHERE n.nspname = 'gtts'
AND prosrc LIKE '%tn_rail_excel_info%'
  • 테이블 사이즈 확인
SELECT nspname || '.' || relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
  FROM pg_tables A, pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND A.tablename = C.relname
--    AND A.tableowner = 'tacs'
    AND nspname !~ '^pg_toast'
    AND relname = 'th_load_info_hist'
  ORDER BY pg_total_relation_size(C.oid) DESC
  • 실행중인 쿼리 확인 및 종료
# 실행중인 쿼리확인
SELECT *
FROM pg_stat_activity
WHERE state = 'active'
-- AND current_timestamp - query_start > '3 min'  시간확인
ORDER BY 1 DESC;


#실행중인 쿼리 종료
SELECT pg_cancel_backend(pid);
  • 통계테이블을 통한 과부하쿼리 확인
    (PG_STAT_STATEMENTS 테이블 사용하기 위해서는 파라메터 설정 필요)
SELECT round(total_time*1000)/1000 AS total_time,query
FROM PG_STAT_STATEMENTS
ORDER BY total_time DESC limit 5;
  • 인덱스 생성
CREATE INDEX th_load_info_shp_ix
ON gtts.TH_LOAD_INFO (SHP_CONFIRM_DT, CORP_GRP_ID,CORP_ID,LOAD_ID);

CREATE INDEX tb_load_result_gtms_load_id
ON gtts.tb_load_result_gtms (LOAD_ID);

– 전체 컬럼 확인

# ex) timestamptz 타입 확인
SELECT 	TABLE_NAME
	, 	COLUMN_NAME
	, 	DATA_TYPE
	, 	CHARACTER_MAXIMUM_LENGTH
	,	IS_NULLABLE
FROM     	information_schema.columns 
WHERE 	1=1
AND data_type = 'timestamp with time zone'  --timestamptz 타입
ORDER BY     ordinal_position
  • 테이블 특정 컬럼타입 확인
SELECT pg_typeof(POD_LT::varchar::UNKNOWN) from TN_CARRIER_INFO TCI
  • 쿼리 실행계획 확인
EXPLAIN ANALYZE
SELECT * FROM TH_LOAD_INFO
WHERE ... (생략)
  • Merge문
INSERT INTO GTTS.TB_SM_USER(
	CORP_GRP_ID
	, CORP_ID
	, LOAD_ID
	, WP_ID
	, RECEIVE_TYPE
	, REGIST_DT
	, REGISTER_ID
	, UPDT_DT
	, UPDUSR_ID
)VALUES(
	#{corpGrpId}
	, #{corpId}
	, #{loadId}
	, #{wpId}
	, #{receiveType}
	, now()
	,'MOBILEUSER'
	, now()
	,'MOBILEUSER'
)ON CONFLICT(  -- PK  있을 경우 Update 하겠다.
	CORP_GRP_ID
	, CORP_ID
	, LOAD_ID
	, WP_ID
	, RECEIVE_TYPE
)DO
UPDATE
SET	RECEIVE_IMAGE = #{receiveImage}
	, UPDT_DT = now()
	, UPDUSR_ID = 'MOBILEUSER'

– 테이블별 코멘트 확인

SELECT n.nspname, c.relname, obj_description(c.oid)  
FROM pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on c.relnamespace=n.oid 
WHERE c.relkind = 'r'
ORDER BY RELNAME

댓글남기기