diff --git a/alembic/versions/a1b2c3d4e5f6_initial_schema.py b/alembic/versions/a1b2c3d4e5f6_initial_schema.py index 6a04b4c..e22ee0d 100644 --- a/alembic/versions/a1b2c3d4e5f6_initial_schema.py +++ b/alembic/versions/a1b2c3d4e5f6_initial_schema.py @@ -254,11 +254,17 @@ def upgrade() -> None: sa.Column("sharpe_ratio", sa.Float, nullable=True), ) - # Convert timeseries tables to TimescaleDB hypertables. - # These calls are idempotent-safe when the extension is loaded. - op.execute("SELECT create_hypertable('market_data', 'timestamp', if_not_exists => TRUE)") - op.execute("SELECT create_hypertable('portfolio_snapshots', 'timestamp', if_not_exists => TRUE)") - op.execute("SELECT create_hypertable('strategy_metrics', 'timestamp', if_not_exists => TRUE)") + # Convert timeseries tables to TimescaleDB hypertables if the extension is available. + op.execute(""" + DO $$ + BEGIN + IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'timescaledb') THEN + PERFORM create_hypertable('market_data', 'timestamp', if_not_exists => TRUE); + PERFORM create_hypertable('portfolio_snapshots', 'timestamp', if_not_exists => TRUE); + PERFORM create_hypertable('strategy_metrics', 'timestamp', if_not_exists => TRUE); + END IF; + END $$; + """) def downgrade() -> None: