This commit is contained in:
vipg
2025-11-14 15:22:30 +08:00
parent fb8261361b
commit 49c233a914
23 changed files with 60 additions and 32 deletions

View File

@@ -0,0 +1,60 @@
-- 切换到目标数据库
\c postgres;
CREATE OR REPLACE FUNCTION update_name_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'trade_records') THEN
-- 创建交易记录表(根据业务场景命名为 trade_records可按需修改
CREATE TABLE trade_records (
-- 主键 UUID默认使用 PostgreSQL 内置函数生成唯一值
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- 开仓日期相关(整数类型,限制合理范围避免无效数据)
open_year INT NOT NULL CHECK (open_year > 1900 AND open_year <= EXTRACT(YEAR FROM CURRENT_DATE) + 1),
open_month INT NOT NULL CHECK (open_month BETWEEN 1 AND 12),
open_day INT NOT NULL CHECK (open_day BETWEEN 1 AND 31),
-- 品种、合约、方向(字符串类型,根据业务长度调整 varchar 长度)
variety VARCHAR(50) NOT NULL, -- 品种(如:黄金、原油)
contract VARCHAR(50) NOT NULL, -- 合约AU2406、CL2407
direction VARCHAR(20) NOT NULL CHECK (direction IN ('多头', '空头', '买入', '卖出')), -- 限制合法方向值
-- 开仓相关数值(使用 numeric 类型替代 double避免浮点数精度丢失适合金融数据
open_price NUMERIC(12, 6) NOT NULL, -- 开仓价格精度整数位6位+小数位6位可按需调整
open_commission NUMERIC(10, 6) NOT NULL DEFAULT 0.00, -- 开仓手续费默认0
-- 平仓日期相关(允许 NULL未平仓时为空
close_year INT CHECK (close_year IS NULL OR (close_year > 1900 AND close_year <= EXTRACT(YEAR FROM CURRENT_DATE) + 1)),
close_month INT CHECK (close_month IS NULL OR close_month BETWEEN 1 AND 12),
close_day INT CHECK (close_day IS NULL OR close_day BETWEEN 1 AND 31),
-- 平仓相关数值(允许 NULL未平仓时为空同样使用 numeric 保证精度)
close_price NUMERIC(12, 6), -- 平仓价格
close_commission NUMERIC(10, 6) DEFAULT 0.00, -- 平仓手续费默认0
close_price_diff NUMERIC(12, 6), -- 平仓差价
tick_price NUMERIC(12, 6), -- 跳点价格
price_diff_profit NUMERIC(12, 6), -- 差价盈亏
total_commission NUMERIC(10, 6) DEFAULT 0.00, -- 总手续费(开仓+平仓,可通过触发器自动计算)
close_profit NUMERIC(12, 6) -- 平仓盈亏
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER update_name_updated_at
BEFORE UPDATE ON "name"
FOR EACH ROW
EXECUTE FUNCTION update_name_modified_column();
RAISE NOTICE 'Created name table and trigger';
ELSE
RAISE NOTICE 'name table already exists';
END IF;
END $$;

View File

@@ -1,32 +0,0 @@
-- 切换到目标数据库
\c postgres;
CREATE OR REPLACE FUNCTION update_name_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'name') THEN
CREATE TABLE name (
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
futures_trading_record_id UUID NOT NULL,
name VARCHAR NOT NULL,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER update_name_updated_at
BEFORE UPDATE ON "name"
FOR EACH ROW
EXECUTE FUNCTION update_name_modified_column();
RAISE NOTICE 'Created name table and trigger';
ELSE
RAISE NOTICE 'name table already exists';
END IF;
END $$;