Files
his/迁移记录-DB变更记录/202512241430add_table_call_number_voice.sql

50 lines
2.8 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE TABLE call_number_voice (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
play_count INT NOT NULL CHECK (play_count BETWEEN 1 AND 5),
call_prefix VARCHAR(20),
call_suffix VARCHAR(50),
speed VARCHAR(10) NOT NULL CHECK (speed IN ('较慢', '正常', '较快')),
volume INT NOT NULL CHECK (volume BETWEEN 0 AND 100),
interval_seconds INT NOT NULL,
cycle_broadcast BOOLEAN NOT NULL DEFAULT false,
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- 核心约束:循环播放与间隔的逻辑关联
CONSTRAINT chk_cycle_interval
CHECK (
(cycle_broadcast = false AND interval_seconds = 0)
OR
(cycle_broadcast = true AND interval_seconds > 0)
)
);
-- 1. 添加表注释PostgreSQL 语法)
COMMENT ON TABLE call_number_voice IS '叫号语音配置表';
-- 2. 逐个添加字段注释PostgreSQL 语法)
COMMENT ON COLUMN call_number_voice.id IS '主键ID自增';
COMMENT ON COLUMN call_number_voice.play_count IS '播放次数1-5次';
COMMENT ON COLUMN call_number_voice.call_prefix IS '叫号前缀(如“请”)';
COMMENT ON COLUMN call_number_voice.call_suffix IS '叫号后缀如“到1号窗口就诊”';
COMMENT ON COLUMN call_number_voice.speed IS '语速(较慢/正常/较快)';
COMMENT ON COLUMN call_number_voice.volume IS '音量0-100%';
COMMENT ON COLUMN call_number_voice.interval_seconds IS '播报间隔(秒)';
COMMENT ON COLUMN call_number_voice.cycle_broadcast IS '是否循环播报(默认关闭)';
COMMENT ON COLUMN call_number_voice.create_time IS '创建时间(自动填充当前时间)';
COMMENT ON COLUMN call_number_voice.update_time IS '更新时间(自动更新)';
-- 实现update_time自动更新PostgreSQL需通过触发器
CREATE OR REPLACE FUNCTION update_call_number_voice_time()
RETURNS TRIGGER AS $$
BEGIN
NEW.update_time = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_call_number_voice_update
BEFORE UPDATE ON call_number_voice
FOR EACH ROW
EXECUTE FUNCTION update_call_number_voice_time();
INSERT INTO call_number_voice (play_count, call_prefix, call_suffix, speed, volume, interval_seconds, cycle_broadcast) VALUES (2,'','到诊室就诊','正常',80,10,TRUE);