Packages

An open and opinionated DeFi/CeFi/TradFi trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation

Current section

Files

Jump to
prop priv repo migrations 20210928212004_create_history_hyper_candles.exs
Raw

priv/repo/migrations/20210928212004_create_history_hyper_candles.exs

defmodule Prop.Repo.Migrations.CreateHistoryHyperCandles do
use Ecto.Migration
def up do
# create temp hyper table to migrate existing data
create table(:hyper_candles, primary_key: false) do
add :time, :utc_datetime, null: false
add :venue, :string, null: false
add :product, :string, null: false
add :source, :string, null: false
add :period, History.PeriodType.type(), null: false
add :open, :decimal, null: false
add :high, :decimal, null: false
add :low, :decimal, null: false
add :close, :decimal, null: false
add :volume, :decimal, null: false
timestamps()
end
execute "SELECT create_hypertable('hyper_candles', 'time');"
execute """
INSERT INTO hyper_candles (
time,
venue,
product,
source,
period,
open,
high,
low,
close,
volume,
inserted_at,
updated_at
)
SELECT
candles.time,
candles.venue,
candles.product,
candles.source,
candles.period,
candles.open,
candles.high,
candles.low,
candles.close,
candles.volume,
candles.inserted_at,
candles.updated_at
FROM candles;
"""
create unique_index(:hyper_candles, [:product, :period, :venue, :source, :time])
# create hyper table to migrate data into final form
drop table(:candles)
create table(:candles, primary_key: false) do
add :time, :utc_datetime, null: false
add :venue, :string, null: false
add :product, :string, null: false
add :source, :string, null: false
add :period, History.PeriodType.type(), null: false
add :open, :decimal, null: false
add :high, :decimal, null: false
add :low, :decimal, null: false
add :close, :decimal, null: false
add :volume, :decimal, null: false
timestamps()
end
execute "SELECT create_hypertable('candles', 'time');"
execute """
INSERT INTO candles (
time,
venue,
product,
source,
period,
open,
high,
low,
close,
volume,
inserted_at,
updated_at
)
SELECT
hyper_candles.time,
hyper_candles.venue,
hyper_candles.product,
hyper_candles.source,
hyper_candles.period,
hyper_candles.open,
hyper_candles.high,
hyper_candles.low,
hyper_candles.close,
hyper_candles.volume,
hyper_candles.inserted_at,
hyper_candles.updated_at
FROM hyper_candles;
"""
create unique_index(:candles, [:product, :period, :venue, :source, :time])
drop table(:hyper_candles)
end
def down do
end
end