fix(db): V88迁移脚本添加DO块处理不存在的表

This commit is contained in:
2026-06-22 09:47:49 +08:00
parent cd2a66148f
commit 35bd10d1b4

View File

@@ -1,12 +1,15 @@
-- V86: CDSS规则引擎升级 - 添加优先级/分类字段 + 规则执行历史
-- V88: CDSS规则引擎升级 - 添加优先级/分类字段 + 规则执行历史
ALTER TABLE cdss_rule ADD COLUMN IF NOT EXISTS priority INT NOT NULL DEFAULT 0;
ALTER TABLE cdss_rule ADD COLUMN IF NOT EXISTS category VARCHAR(64);
-- 为cdss_rule表添加字段仅当表存在时
DO $$ BEGIN
ALTER TABLE cdss_rule ADD COLUMN IF NOT EXISTS priority INT NOT NULL DEFAULT 0;
ALTER TABLE cdss_rule ADD COLUMN IF NOT EXISTS category VARCHAR(64);
EXCEPTION WHEN undefined_table THEN
RAISE NOTICE 'cdss_rule table does not exist, skipping alter';
END $$;
COMMENT ON COLUMN cdss_rule.priority IS '规则优先级(0普通 1紧急 2最高)';
COMMENT ON COLUMN cdss_rule.category IS '规则分类';
CREATE TABLE cdss_rule_execution (
-- 创建规则执行历史表
CREATE TABLE IF NOT EXISTS cdss_rule_execution (
id BIGSERIAL PRIMARY KEY,
rule_id BIGINT NOT NULL,
rule_code VARCHAR(64) NOT NULL,
@@ -22,18 +25,8 @@ CREATE TABLE cdss_rule_execution (
delete_flag CHAR(1) DEFAULT '0'
);
COMMENT ON TABLE cdss_rule_execution IS 'CDSS规则执行历史';
COMMENT ON COLUMN cdss_rule_execution.id IS '执行记录ID';
COMMENT ON COLUMN cdss_rule_execution.rule_id IS '规则ID';
COMMENT ON COLUMN cdss_rule_execution.rule_code IS '规则编码';
COMMENT ON COLUMN cdss_rule_execution.encounter_id IS '就诊ID';
COMMENT ON COLUMN cdss_rule_execution.patient_id IS '患者ID';
COMMENT ON COLUMN cdss_rule_execution.matched IS '是否命中';
COMMENT ON COLUMN cdss_rule_execution.execution_time IS '执行时间';
COMMENT ON COLUMN cdss_rule_execution.execution_result IS '执行结果';
COMMENT ON COLUMN cdss_rule_execution.duration_ms IS '执行耗时(毫秒)';
CREATE INDEX idx_cdss_exec_rule ON cdss_rule_execution(rule_id);
CREATE INDEX idx_cdss_exec_encounter ON cdss_rule_execution(encounter_id);
CREATE INDEX idx_cdss_exec_patient ON cdss_rule_execution(patient_id);
CREATE INDEX idx_cdss_exec_time ON cdss_rule_execution(execution_time);
-- 创建索引
CREATE INDEX IF NOT EXISTS idx_cdss_exec_rule ON cdss_rule_execution(rule_id);
CREATE INDEX IF NOT EXISTS idx_cdss_exec_encounter ON cdss_rule_execution(encounter_id);
CREATE INDEX IF NOT EXISTS idx_cdss_exec_patient ON cdss_rule_execution(patient_id);
CREATE INDEX IF NOT EXISTS idx_cdss_exec_time ON cdss_rule_execution(execution_time);