728x90
반응형
PostgreSql에서 파티션 자동생성 프로시저 입니다. 오라클과 달리 PosrgreSql에서는 파티션을 나누면 그 자체가 서브 테이블로 생성이 됩니다. 서브테이블에 바로 인서트 해도 되고 서브테이블을 그냥 삭제 해 버리면 파티션도 자동으로 그냥 삭제 처리가 됩니다.
CREATE OR REPLACE PROCEDURE PROC_AUTO_PART_CREATE(
OUT_RESULT_CD INOUT VARCHAR,
OUT_SQLERR INOUT VARCHAR
)
LANGUAGE plpgsql
AS $procedure$
DECLARE
V_SQL VARCHAR(4000);
C_PART RECORD;
BEGIN
FOR C_PART IN select 'CREATE TABLE public.part_' || A.PDATE || ' PARTITION OF public.tb_auto_partion_test FOR VALUES FROM ('''|| A.PDATE ||''') TO (''' || TO_CHAR(TO_DATE(A.PDATE ,'YYYYMMDD') + 1,'YYYYMMDD') || ''')' AS SCRIPT
from
(
SELECT to_char(a.date + b.idx -1,'YYYYMMDD') as PDATE
FROM (
SELECT CURRENT_DATE AS date
) a
CROSS JOIN (
SELECT generate_series(1, 7) as idx /* 1번에서 7번까지 순번이 부여되면서 7개의 로우가 생성된다.
) b
EXCEPT /* 오라클에서 minus와 같다 */
SELECT REPLACE(RELNAME,'part_','') as PDATE
FROM pg_class
WHERE relname LIKE 'part_%'
AND RELHASINDEX = TRUE
ORDER BY 1
) A
LOOP
V_SQL := C_PART.SCRIPT;
EXECUTE V_SQL;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
OUT_RESULT_CD := -1;
OUT_SQLERR := sqlstate || '(' || SQLCODE || ')';
END;
$procedure$
728x90
반응형
'데이터베이스 > Postgresql' 카테고리의 다른 글
[PostgreSql] 특정문자를 짤라서 컬럼으로 변경 (0) | 2022.06.30 |
---|---|
[PostgreSql] pg_cron job schedule 등록방법 (0) | 2022.06.29 |
[PostgreSql] 프로시저 생성 방법 (0) | 2022.06.28 |
[PostgreSql] 함수 function 생성 방법 (0) | 2022.06.28 |
[PostgreSql] 오라클에서 postgresql 로 이관시 타입변환 정리 (0) | 2022.06.28 |
댓글