feat: AlpacaPriceData에 interval 컬럼 추가 — 일봉/분봉 DB 충돌 해결
- alpaca_price_data 테이블에 interval 컬럼 추가 (VARCHAR, default '1d') - unique constraint: (ticker, date) → (ticker, date, interval) - get_or_fetch_multi_bars(): interval 필터로 coverage 체크 및 DB 조회 - insert rows에 interval 포함 - asyncpg param limit 대비 CHUNK 3000→2900 (파라미터 11개/행) - alembic 마이그레이션: h9b0c1d2e3f4 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
3766c00b97
commit
af26df8895
@ -0,0 +1,49 @@
|
||||
"""add interval column to alpaca_price_data
|
||||
|
||||
Revision ID: h9b0c1d2e3f4
|
||||
Revises: g8a9b0c1d2e3
|
||||
Create Date: 2026-04-14
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision: str = "h9b0c1d2e3f4"
|
||||
down_revision: Union[str, Sequence[str], None] = "g8a9b0c1d2e3"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
# 1. Add interval column (default '1d' for existing rows)
|
||||
op.add_column(
|
||||
"alpaca_price_data",
|
||||
sa.Column("interval", sa.String(10), nullable=False, server_default="1d"),
|
||||
)
|
||||
|
||||
# 2. Drop old unique constraint and index
|
||||
op.drop_constraint("uq_alpaca_price_data", "alpaca_price_data", type_="unique")
|
||||
op.drop_index("idx_alpaca_price_ticker_date", table_name="alpaca_price_data")
|
||||
|
||||
# 3. Create new unique constraint and index including interval
|
||||
op.create_unique_constraint(
|
||||
"uq_alpaca_price_data", "alpaca_price_data", ["ticker", "date", "interval"]
|
||||
)
|
||||
op.create_index(
|
||||
"idx_alpaca_price_ticker_date", "alpaca_price_data", ["ticker", "date", "interval"]
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_constraint("uq_alpaca_price_data", "alpaca_price_data", type_="unique")
|
||||
op.drop_index("idx_alpaca_price_ticker_date", table_name="alpaca_price_data")
|
||||
|
||||
op.create_unique_constraint(
|
||||
"uq_alpaca_price_data", "alpaca_price_data", ["ticker", "date"]
|
||||
)
|
||||
op.create_index(
|
||||
"idx_alpaca_price_ticker_date", "alpaca_price_data", ["ticker", "date"]
|
||||
)
|
||||
|
||||
op.drop_column("alpaca_price_data", "interval")
|
||||
Loading…
Reference in New Issue