add
This commit is contained in:
@@ -1,30 +0,0 @@
|
|||||||
-- 切换到目标数据库
|
|
||||||
\c postgres;
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION update_futures_trade_record_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 = 'futures_trade_record') THEN
|
|
||||||
CREATE TABLE "futures_trade_record" ( -- futures_trade_record是关键字,用双引号包裹
|
|
||||||
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY 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_futures_trade_record_updated_at
|
|
||||||
BEFORE UPDATE ON "futures_trade_record"
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION update_futures_trade_record_modified_column();
|
|
||||||
|
|
||||||
RAISE NOTICE 'Created futures_trade_record table and trigger';
|
|
||||||
ELSE
|
|
||||||
RAISE NOTICE 'futures_trade_record table already exists';
|
|
||||||
END IF;
|
|
||||||
END $$;
|
|
||||||
@@ -15,7 +15,7 @@ BEGIN
|
|||||||
-- 创建交易记录表(根据业务场景命名为 trade_record,可按需修改)
|
-- 创建交易记录表(根据业务场景命名为 trade_record,可按需修改)
|
||||||
CREATE TABLE trade_record (
|
CREATE TABLE trade_record (
|
||||||
-- 主键 UUID,默认使用 PostgreSQL 内置函数生成唯一值
|
-- 主键 UUID,默认使用 PostgreSQL 内置函数生成唯一值
|
||||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
|
||||||
|
|
||||||
-- 开仓日期相关(整数类型,限制合理范围避免无效数据)
|
-- 开仓日期相关(整数类型,限制合理范围避免无效数据)
|
||||||
open_year INT NOT NULL CHECK (open_year > 1900 AND open_year <= EXTRACT(YEAR FROM CURRENT_DATE) + 1),
|
open_year INT NOT NULL CHECK (open_year > 1900 AND open_year <= EXTRACT(YEAR FROM CURRENT_DATE) + 1),
|
||||||
@@ -39,20 +39,52 @@ CREATE TABLE trade_record (
|
|||||||
-- 平仓相关数值(允许 NULL,未平仓时为空;同样使用 numeric 保证精度)
|
-- 平仓相关数值(允许 NULL,未平仓时为空;同样使用 numeric 保证精度)
|
||||||
close_price NUMERIC(12, 6), -- 平仓价格
|
close_price NUMERIC(12, 6), -- 平仓价格
|
||||||
close_commission NUMERIC(10, 6) DEFAULT 0.00, -- 平仓手续费(默认0)
|
close_commission NUMERIC(10, 6) DEFAULT 0.00, -- 平仓手续费(默认0)
|
||||||
close_price_diff NUMERIC(12, 6), -- 平仓差价
|
variety_tick NUMERIC(12, 6), -- 品种跳点
|
||||||
|
close_tick_diff NUMERIC(12, 6), -- 平仓跳点差价
|
||||||
tick_price NUMERIC(12, 6), -- 跳点价格
|
tick_price NUMERIC(12, 6), -- 跳点价格
|
||||||
price_diff_profit NUMERIC(12, 6), -- 差价盈亏
|
tick_diff_profit NUMERIC(12, 6), -- 平仓跳点差价盈亏
|
||||||
total_commission NUMERIC(10, 6) DEFAULT 0.00, -- 总手续费(开仓+平仓,可通过触发器自动计算)
|
total_commission NUMERIC(10, 6) DEFAULT 0.00, -- 总手续费(开仓+平仓,可通过触发器自动计算)
|
||||||
close_profit NUMERIC(12, 6) -- 平仓盈亏
|
close_profit NUMERIC(12, 6) -- 平仓盈亏
|
||||||
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TRIGGER update_trade_record_updated_at
|
CREATE TRIGGER update_trade_record_updated_at
|
||||||
BEFORE UPDATE ON "trade_record"
|
BEFORE UPDATE ON "trade_record"
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
EXECUTE FUNCTION update_trade_record_modified_column();
|
EXECUTE FUNCTION update_trade_record_modified_column();
|
||||||
|
|
||||||
|
-- 按开仓日期查询索引
|
||||||
|
CREATE INDEX idx_trade_open_date ON trade_record (open_year, open_month, open_day);
|
||||||
|
-- 按品种+合约查询索引
|
||||||
|
CREATE INDEX idx_trade_variety_contract ON trade_record (variety, contract);
|
||||||
|
-- 按平仓状态查询索引(未平仓:close_year IS NULL)
|
||||||
|
CREATE INDEX idx_trade_close_status ON trade_record (close_year);
|
||||||
|
|
||||||
|
--------------- 注释说明(增强可读性)-------------
|
||||||
|
COMMENT ON TABLE trade_record IS '交易记录表(存储开仓/平仓相关信息)';
|
||||||
|
COMMENT ON COLUMN trade_record.id IS '主键UUID(全局唯一标识)';
|
||||||
|
COMMENT ON COLUMN trade_record.open_year IS '开仓年份';
|
||||||
|
COMMENT ON COLUMN trade_record.open_month IS '开仓月份';
|
||||||
|
COMMENT ON COLUMN trade_record.open_day IS '开仓日期';
|
||||||
|
COMMENT ON COLUMN trade_record.variety IS '交易品种(如:FG、RB)';
|
||||||
|
COMMENT ON COLUMN trade_record.contract IS '交易合约(如:2401)';
|
||||||
|
COMMENT ON COLUMN trade_record.direction IS '交易方向(多/空)';
|
||||||
|
COMMENT ON COLUMN trade_record.open_price IS '开仓价格';
|
||||||
|
COMMENT ON COLUMN trade_record.open_commission IS '开仓手续费';
|
||||||
|
COMMENT ON COLUMN trade_record.close_year IS '平仓年份(未平仓为NULL)';
|
||||||
|
COMMENT ON COLUMN trade_record.close_month IS '平仓月份(未平仓为NULL)';
|
||||||
|
COMMENT ON COLUMN trade_record.close_day IS '平仓日期(未平仓为NULL)';
|
||||||
|
COMMENT ON COLUMN trade_record.close_price IS '平仓价格(未平仓为NULL)';
|
||||||
|
COMMENT ON COLUMN trade_record.close_commission IS '平仓手续费(未平仓为NULL)';
|
||||||
|
COMMENT ON COLUMN trade_record.variety_tick IS '品种跳点';
|
||||||
|
COMMENT ON COLUMN trade_record.close_tick_diff IS '平仓差价跳点((平仓价格-开仓价格)/品种最小跳点)';
|
||||||
|
COMMENT ON COLUMN trade_record.tick_price IS '跳点价格(单个跳点对应的金额)';
|
||||||
|
COMMENT ON COLUMN trade_record.tick_diff_profit IS '差价盈亏(基于平仓差价跳点计算的盈利/亏损)';
|
||||||
|
COMMENT ON COLUMN trade_record.total_commission IS '总手续费(开仓+平仓,自动计算)';
|
||||||
|
COMMENT ON COLUMN trade_record.close_profit IS '平仓盈亏(最终实际盈利/亏损)';
|
||||||
|
|
||||||
RAISE NOTICE 'created trade_record table and trigger';
|
RAISE NOTICE 'created trade_record table and trigger';
|
||||||
ELSE
|
ELSE
|
||||||
RAISE NOTICE 'trade_record table already exists';
|
RAISE NOTICE 'trade_record table already exists';
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
-- 切换到目标数据库
|
|
||||||
\c postgres;
|
|
||||||
|
|
||||||
CREATE OR REPLACE FUNCTION update_code_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 = 'code') THEN
|
|
||||||
CREATE TABLE code (
|
|
||||||
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
|
|
||||||
futures_trade_record_id UUID NOT NULL,
|
|
||||||
code 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_code_updated_at
|
|
||||||
BEFORE UPDATE ON "code"
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION update_code_modified_column();
|
|
||||||
|
|
||||||
RAISE NOTICE 'Created code table and trigger';
|
|
||||||
ELSE
|
|
||||||
RAISE NOTICE 'code table already exists';
|
|
||||||
END IF;
|
|
||||||
END $$;
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
\c postgres;
|
|
||||||
|
|
||||||
DO $$
|
|
||||||
DECLARE
|
|
||||||
view_exists BOOLEAN;
|
|
||||||
BEGIN
|
|
||||||
-- 检查视图是否已存在
|
|
||||||
SELECT EXISTS (
|
|
||||||
SELECT 1 FROM information_schema.views
|
|
||||||
WHERE table_name = 'futures_trade_record_info_view'
|
|
||||||
) INTO view_exists;
|
|
||||||
|
|
||||||
-- 创建或更新视图
|
|
||||||
CREATE OR REPLACE VIEW futures_trade_record_info_view AS
|
|
||||||
SELECT
|
|
||||||
u.id AS futures_trade_record_id,
|
|
||||||
n.name AS name,
|
|
||||||
c.code AS code,
|
|
||||||
u.deleted AS deleted
|
|
||||||
FROM
|
|
||||||
"futures_trade_record" u
|
|
||||||
JOIN
|
|
||||||
name n ON u.id = n.futures_trade_record_id
|
|
||||||
JOIN
|
|
||||||
code c ON u.id = c.futures_trade_record_id
|
|
||||||
WHERE
|
|
||||||
u.deleted = FALSE;
|
|
||||||
|
|
||||||
-- 根据视图是否已存在输出不同提示
|
|
||||||
IF view_exists THEN
|
|
||||||
RAISE NOTICE '视图 futures_trade_record_info_view 已更新';
|
|
||||||
ELSE
|
|
||||||
RAISE NOTICE '视图 futures_trade_record_info_view 已创建';
|
|
||||||
END IF;
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
RAISE NOTICE '处理视图时发生错误: %', SQLERRM;
|
|
||||||
END $$;
|
|
||||||
Reference in New Issue
Block a user