add
This commit is contained in:
@@ -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 $$;
|
||||
|
||||
Reference in New Issue
Block a user