-- V14: 파티셔닝 (대용량 로그 테이블)
--
-- 주의: 운영에서 기존 테이블을 파티셔닝하려면 데이터 마이그레이션이 필요.
-- 본 마이그레이션은 신규 테이블만 파티셔닝 적용.
-- 기존 api_access_log / data_change_log 는 별도 마이그레이션으로 전환 권장.
-- 본 V14 는 파티션 자동 생성을 위한 함수 + cron 형태의 helper.

-- 월별 파티션 테이블을 자동 생성하는 함수 (운영 시 cron 또는 pg_cron 으로 매월 호출)
CREATE OR REPLACE FUNCTION create_monthly_partition(
    base_table TEXT,
    target_month DATE
) RETURNS void AS $$
DECLARE
    partition_name TEXT;
    start_date DATE;
    end_date DATE;
BEGIN
    start_date := date_trunc('month', target_month);
    end_date := start_date + interval '1 month';
    partition_name := base_table || '_' || to_char(start_date, 'YYYYMM');

    EXECUTE format(
        'CREATE TABLE IF NOT EXISTS %I PARTITION OF %I FOR VALUES FROM (%L) TO (%L)',
        partition_name, base_table, start_date, end_date
    );
END;
$$ LANGUAGE plpgsql;

COMMENT ON FUNCTION create_monthly_partition IS
'파티션 테이블에 월별 파티션을 자동 생성. 예: SELECT create_monthly_partition(''api_access_log'', NOW())';
