Pyun's

반응형

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;
반응형

반응형

public static JobParameters getJobParameters(Map<String, Object> jobDataMap) {
        String key;
        Object value;
        JobParametersBuilder builder = new JobParametersBuilder();

        if (jobDataMap != null) {

            for (Entry<String, Object> entry : jobDataMap.entrySet()) {
                key = entry.getKey();
                value = entry.getValue();

                if (value instanceof String) {
                    builder.addString(key, (String) value);
                }
                else if (value instanceof Float || value instanceof Double) {
                    builder.addDouble(key, ((Number) value).doubleValue());
                }
                else if (value instanceof Integer || value instanceof Long) {
                    builder.addLong(key, ((Number) value).longValue());
                }
                else if (value instanceof Date) {
                    builder.addDate(key, (Date) value);
                }
                else {

                    if (LOG.isDebugEnabled()) {
                        LOG.debug("JobDataMap contains values which are not job parameters (ignoring).");
                    }
                }
            }
        }

        return builder.toJobParameters();
    }

반응형

업무중 배운것들

JAVA2021. 7. 27. 10:33
반응형
반응형

'JAVA' 카테고리의 다른 글

JPA 공부  (0) 2020.12.10
jsp 에서 c 문법 사용하기  (0) 2017.07.31
[스프링 게시판 만들기.2] 오라클 연동 DBCP 이용 방법  (0) 2017.07.31
Spring WEB 한글깨짐 수정방법  (0) 2017.07.25
스프링 기초.1  (0) 2017.06.19