This commit is contained in:
vipg
2025-11-14 17:23:29 +08:00
parent e2a6cfc21c
commit 66db58898c

View File

@@ -23,6 +23,7 @@ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_name') THEN
CREATE TABLE variety_name (
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
variety_id UUID NOT NULL,
name VARCHAR(50) NOT NULL,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -41,6 +42,7 @@ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_code') THEN
CREATE TABLE variety_code (
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
variety_id UUID NOT NULL,
code VARCHAR(50) NOT NULL,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -59,6 +61,7 @@ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_tick') THEN
CREATE TABLE variety_tick (
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
variety_id UUID NOT NULL,
tick NUMERIC(12, 6),
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -77,6 +80,7 @@ BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'variety_tick_price') THEN
CREATE TABLE variety_tick_price (
id UUID DEFAULT gen_random_uuid_v7() PRIMARY KEY NOT NULL,
variety_id UUID NOT NULL,
price NUMERIC(12, 6),
deleted BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
@@ -91,4 +95,51 @@ BEGIN
ELSE
RAISE NOTICE 'variety_tick_price table already exists';
END IF;
END $$;
END $$;
DO $$
DECLARE
view_exists BOOLEAN;
BEGIN
-- 检查视图是否已存在
SELECT EXISTS (
SELECT 1 FROM information_schema.views
WHERE table_name = 'variety_info_view'
) INTO view_exists;
-- 创建或更新视图
CREATE OR REPLACE VIEW variety_info_view AS
SELECT
v.id AS variety_id, -- 品种主表唯一ID
vn.name AS name, -- 品种名称来自variety_name
vc.code AS code, -- 品种代码来自variety_code
vt.tick AS tick, -- 品种跳点来自variety_tick
vtp.price AS tick_price -- 跳点价格来自variety_tick_price
FROM
variety v
-- 左连接:确保主表存在时,即使子表无数据也保留记录(避免数据丢失)
LEFT JOIN variety_name vn
ON v.id = vn.variety_id
AND vn.deleted = FALSE -- 子表筛选未删除数据(连接时过滤更高效)
LEFT JOIN variety_code vc
ON v.id = vc.variety_id
AND vc.deleted = FALSE
LEFT JOIN variety_tick vt
ON v.id = vt.variety_id
AND vt.deleted = FALSE
LEFT JOIN variety_tick_price vtp
ON v.id = vtp.variety_id
AND vtp.deleted = FALSE
WHERE
v.deleted = FALSE; -- 主表筛选未删除的品种
-- 根据视图是否已存在输出不同提示
IF view_exists THEN
RAISE NOTICE '视图 variety_info_view 已更新';
ELSE
RAISE NOTICE '视图 variety_info_view 已创建';
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE '处理视图时发生错误: %', SQLERRM;
END $$;