플젝 들어가서 처음 mapper 생성시 사용할만한 쿼리
DB관련2026. 4. 16. 09:43
반응형
1. 테이블에 코맨트 가져와서 셀렉트 시 주석 다는 쿼리
WITH columns AS (
SELECT
ps.schemaname,
ps.relname,
pa.attname AS column_name,
COALESCE(pd.description, 'No Comment') AS column_comment,
pa.attnum,
MAX(pa.attnum) OVER () AS max_attnum
FROM pg_stat_all_tables ps
JOIN pg_attribute pa ON ps.relid = pa.attrelid
LEFT JOIN pg_description pd ON pd.objoid = pa.attrelid AND pd.objsubid = pa.attnum
WHERE ps.schemaname = 'TEST' -- 스키마명 입력
AND ps.relname = 'TEST' -- 테이블명 입력
AND pa.attnum > 0
AND NOT pa.attisdropped
ORDER BY pa.attnum
)
SELECT
'SELECT' || E' \n\t' || -- SELECT 바로 뒤에 줄 바꿈과 탭 추가 (들여쓰기)
STRING_AGG(
CASE
WHEN attnum = max_attnum THEN
-- 마지막 컬럼은 쉼표 없음
column_name || ' /* ' || column_comment || ' */'
ELSE
-- 마지막이 아닌 컬럼은 쉼표와 주석 뒤에 줄 바꿈 및 들여쓰기
column_name || E' ,\t/* ' || column_comment || ' */' || E'\n\t'
END,
'' -- 각 항목 사이에 별도의 구분자 없이 CASE 문 안에서 처리
) || E'\n' || -- 모든 컬럼 뒤에 줄 바꿈 (FROM 앞에)
'FROM ' || schemaname || '.' || relname || ';' AS query
FROM columns
GROUP BY schemaname, relname;
2. 조건 자동으로 생성해주는 쿼리(in)
SELECT
STRING_AGG(
'<if test ="'
|| substr( replace( initcap( '1' || pa.attname), '_', '' ), 2) || 'List != null and ' || substr( replace( initcap( '1' || pa.attname), '_', '' ), 2) || E'List.size > 0">\n'
|| E'\t'
|| 'AND th.' --약어
|| pa.attname || E' IN\n'
|| E'\t<foreach collection="' || substr( replace( initcap( '1' || pa.attname), '_', '' ), 2) || 'List' || E'" item="item" open="(" close=")" separator=",">\n'
|| E'\t\t#{item}\n'
|| E'\t</foreach>\n'
|| E'</if>\n'
, ''
) as "mybatisWhere"
FROM pg_stat_all_tables ps
JOIN pg_attribute pa ON ps.relid = pa.attrelid
LEFT JOIN pg_description pd ON pd.objoid = pa.attrelid AND pd.objsubid = pa.attnum
WHERE ps.schemaname = 'test'
AND ps.relname = 'test' -- 테이블명 입력
AND pa.attnum > 0
AND NOT pa.attisdropped
;
3. 조건 자동으로 생성해주는 쿼리(eq ( like로변경가능))
SELECT
STRING_AGG(
'<when test="srchKwTp == '''
|| substr( replace( initcap( '1' || pa.attname), '_', '' ), 2)
|| E'''">\n'
|| E'\t'
|| 'tb.' --약어
|| pa.attname
|| E'= #{srchKw}\n'
|| E'</when>\n'
, ''
) as "mybatisWhere"
FROM pg_stat_all_tables ps
JOIN pg_attribute pa ON ps.relid = pa.attrelid
LEFT JOIN pg_description pd ON pd.objoid = pa.attrelid AND pd.objsubid = pa.attnum
WHERE ps.schemaname = 'TEST'
AND ps.relname = 'TEST' -- 테이블명 입력
AND pa.attnum > 0
AND NOT pa.attisdropped
;
4. 슬로우 쿼리 검색
-- 오래 실행 중인 쿼리 (예: 5초 이상)
SELECT
pid,
datname AS database,
usename AS user,
client_addr,
state, -- active / idle in transaction 등
wait_event_type,
wait_event,
current_timestamp - query_start AS runtime, -- 실행 시간
query_start,
query -- 실제 실행 쿼리
FROM pg_stat_activity
WHERE state = 'active'
AND current_timestamp - query_start > interval '5 seconds' -- 원하는 시간으로 조정
ORDER BY runtime DESC;반응형