generated from gc/template-java-maven
- PartitionService 범용화 (테이블명 파라미터) + 일별 파티션 메서드 추가 - PartitionManageScheduler에 health_log 일별 파티션 관리 추가 (7일 선행 생성, 90일 삭제) - DataCleanupScheduler health_log DELETE 제거 (파티션 DROP으로 대체) - SnpServiceHealthLog FK 제약 제거 (파티션 테이블 호환) - 복합 인덱스 추가 (service_id+checked_at, daily_uptime 최적화) - 마이그레이션 SQL 스크립트 추가
73 lines
3.2 KiB
SQL
73 lines
3.2 KiB
SQL
-- =============================================================
|
|
-- SNP Connection Monitoring - Health Log 파티션 마이그레이션
|
|
-- snp_service_health_log → 일별 Range 파티션 전환
|
|
-- 스키마: common
|
|
-- =============================================================
|
|
|
|
-- 1. 백업
|
|
CREATE TABLE common.snp_service_health_log_backup AS
|
|
SELECT * FROM common.snp_service_health_log;
|
|
|
|
-- 2. 기존 테이블 삭제
|
|
DROP TABLE common.snp_service_health_log;
|
|
|
|
-- 3. 파티션 테이블 생성
|
|
CREATE TABLE common.snp_service_health_log (
|
|
log_id BIGSERIAL,
|
|
service_id BIGINT NOT NULL,
|
|
previous_status VARCHAR(10),
|
|
current_status VARCHAR(10) NOT NULL,
|
|
response_time INTEGER,
|
|
error_message TEXT,
|
|
checked_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (log_id, checked_at)
|
|
) PARTITION BY RANGE (checked_at);
|
|
|
|
-- 4. 인덱스 (파티션에 자동 상속)
|
|
CREATE INDEX idx_snp_health_log_service ON common.snp_service_health_log (service_id);
|
|
CREATE INDEX idx_snp_health_log_checked ON common.snp_service_health_log (checked_at);
|
|
CREATE INDEX idx_health_log_svc_checked ON common.snp_service_health_log (service_id, checked_at DESC);
|
|
CREATE INDEX idx_health_log_daily_uptime ON common.snp_service_health_log (service_id, checked_at, current_status);
|
|
|
|
-- 5. 오늘 + 미래 7일 파티션 생성 (실행 시점에 맞게 날짜 수정)
|
|
-- 예시: 2026-04-13 실행 기준
|
|
CREATE TABLE common.snp_service_health_log_20260413
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-13') TO ('2026-04-14');
|
|
CREATE TABLE common.snp_service_health_log_20260414
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-14') TO ('2026-04-15');
|
|
CREATE TABLE common.snp_service_health_log_20260415
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-15') TO ('2026-04-16');
|
|
CREATE TABLE common.snp_service_health_log_20260416
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-16') TO ('2026-04-17');
|
|
CREATE TABLE common.snp_service_health_log_20260417
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-17') TO ('2026-04-18');
|
|
CREATE TABLE common.snp_service_health_log_20260418
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-18') TO ('2026-04-19');
|
|
CREATE TABLE common.snp_service_health_log_20260419
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-19') TO ('2026-04-20');
|
|
CREATE TABLE common.snp_service_health_log_20260420
|
|
PARTITION OF common.snp_service_health_log
|
|
FOR VALUES FROM ('2026-04-20') TO ('2026-04-21');
|
|
|
|
-- 6. 데이터 복원 (컬럼 명시)
|
|
INSERT INTO common.snp_service_health_log (
|
|
log_id, service_id, previous_status, current_status, response_time, error_message, checked_at
|
|
) SELECT
|
|
log_id, service_id, previous_status, current_status, response_time, error_message, checked_at
|
|
FROM common.snp_service_health_log_backup
|
|
WHERE checked_at >= '2026-04-13';
|
|
|
|
-- 7. 시퀀스 리셋
|
|
SELECT setval(pg_get_serial_sequence('common.snp_service_health_log', 'log_id'),
|
|
(SELECT COALESCE(MAX(log_id), 0) FROM common.snp_service_health_log));
|
|
|
|
-- 8. 백업 삭제 (확인 후)
|
|
-- DROP TABLE common.snp_service_health_log_backup;
|