-- ============================================================= -- SNP Connection Monitoring - 파티션 마이그레이션 -- snp_api_request_log 테이블을 월별 Range 파티션으로 전환 -- 스키마: common -- -- 주의: 운영 DB에서 수동 실행. 서비스 중지 후 진행 권장. -- ============================================================= BEGIN; -- 1. 기존 데이터 백업 CREATE TABLE common.snp_api_request_log_backup AS SELECT * FROM common.snp_api_request_log; -- 2. 기존 테이블 삭제 DROP TABLE IF EXISTS common.snp_api_request_log CASCADE; -- 3. 파티션 테이블 생성 CREATE TABLE common.snp_api_request_log ( log_id BIGSERIAL, request_url VARCHAR(2000), request_params TEXT, request_method VARCHAR(10), request_status VARCHAR(20), request_headers TEXT, request_ip VARCHAR(45), service_id BIGINT, user_id BIGINT, api_key_id BIGINT, response_size BIGINT, response_time INTEGER, response_status INTEGER, error_message TEXT, requested_at TIMESTAMP NOT NULL DEFAULT NOW(), tenant_id BIGINT, PRIMARY KEY (log_id, requested_at) ) PARTITION BY RANGE (requested_at); -- 4. 현재 월 + 미래 2개월 파티션 생성 (실행 시점에 맞게 날짜 수정) -- 예시: 2026년 4월 실행 기준 CREATE TABLE common.snp_api_request_log_202604 PARTITION OF common.snp_api_request_log FOR VALUES FROM ('2026-04-01') TO ('2026-05-01'); CREATE TABLE common.snp_api_request_log_202605 PARTITION OF common.snp_api_request_log FOR VALUES FROM ('2026-05-01') TO ('2026-06-01'); CREATE TABLE common.snp_api_request_log_202606 PARTITION OF common.snp_api_request_log FOR VALUES FROM ('2026-06-01') TO ('2026-07-01'); -- 5. 인덱스 재생성 (파티션 테이블에 자동 상속됨) CREATE INDEX idx_snp_request_log_service ON common.snp_api_request_log (service_id); CREATE INDEX idx_snp_request_log_user ON common.snp_api_request_log (user_id); CREATE INDEX idx_snp_request_log_requested ON common.snp_api_request_log (requested_at); CREATE INDEX idx_snp_request_log_tenant ON common.snp_api_request_log (tenant_id); CREATE INDEX idx_snp_request_log_daily_stats ON common.snp_api_request_log (requested_at, request_status); CREATE INDEX idx_snp_request_log_daily_user ON common.snp_api_request_log (requested_at, user_id); CREATE INDEX idx_snp_request_log_svc_stats ON common.snp_api_request_log (requested_at, service_id, request_status); CREATE INDEX idx_snp_request_log_top_api ON common.snp_api_request_log (requested_at, request_url, request_method); -- 6. 데이터 복원 INSERT INTO common.snp_api_request_log SELECT * FROM common.snp_api_request_log_backup; -- 7. 백업 테이블 삭제 (데이터 복원 확인 후) -- DROP TABLE common.snp_api_request_log_backup; COMMIT;