From f59000f5ef3558c6451ad7c7d2e91d6bdba0b930 Mon Sep 17 00:00:00 2001 From: XuJiacheng Date: Wed, 4 Mar 2026 11:49:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E8=BF=90=E8=A1=8C=E6=97=B6=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=8E?= =?UTF-8?q?=E5=88=86=E5=8C=BA=E7=BB=B4=E6=8A=A4=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E5=8C=96=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E6=96=B0=E5=A2=9E=20SQL=20=E8=84=9A=E6=9C=AC=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proposal.md | 0 .../specs/db/spec.md | 0 .../tasks.md | 0 openspec/specs/db/spec.md | 28 +++++++++++++++++++ 4 files changed, 28 insertions(+) rename openspec/changes/{remove-runtime-db-bootstrap => archive/2026-03-04-remove-runtime-db-bootstrap}/proposal.md (100%) rename openspec/changes/{remove-runtime-db-bootstrap => archive/2026-03-04-remove-runtime-db-bootstrap}/specs/db/spec.md (100%) rename openspec/changes/{remove-runtime-db-bootstrap => archive/2026-03-04-remove-runtime-db-bootstrap}/tasks.md (100%) diff --git a/openspec/changes/remove-runtime-db-bootstrap/proposal.md b/openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/proposal.md similarity index 100% rename from openspec/changes/remove-runtime-db-bootstrap/proposal.md rename to openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/proposal.md diff --git a/openspec/changes/remove-runtime-db-bootstrap/specs/db/spec.md b/openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/specs/db/spec.md similarity index 100% rename from openspec/changes/remove-runtime-db-bootstrap/specs/db/spec.md rename to openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/specs/db/spec.md diff --git a/openspec/changes/remove-runtime-db-bootstrap/tasks.md b/openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/tasks.md similarity index 100% rename from openspec/changes/remove-runtime-db-bootstrap/tasks.md rename to openspec/changes/archive/2026-03-04-remove-runtime-db-bootstrap/tasks.md diff --git a/openspec/specs/db/spec.md b/openspec/specs/db/spec.md index a75f0cf..d8e915a 100644 --- a/openspec/specs/db/spec.md +++ b/openspec/specs/db/spec.md @@ -87,6 +87,34 @@ - **THEN** 写入应路由到正确日分区 - **AND** 常见查询(hotel_id + 时间范围)应触发分区裁剪 +### Requirement: 服务运行时不得承担建库与定时分区维护 +系统 MUST 仅负责数据库连接与业务写入,不在服务启动时执行数据库结构初始化,也不在进程内执行定时分区维护。 + +#### Scenario: 服务启动仅建立连接 +- **WHEN** 服务进程启动并连接 PostgreSQL +- **THEN** 系统应只创建连接池并完成连通性检测 +- **AND** 不应在运行时执行表/索引/函数等 DDL 初始化 +- **AND** 不应在进程内启动分区维护定时任务 + +#### Scenario: 写入遇到缺分区时的运行时兜底 +- **WHEN** 批量写入 `heartbeat.heartbeat_events` 遇到缺分区错误 +- **THEN** 系统应基于该批次的时间范围调用 `heartbeat.ensure_partitions` +- **AND** 调用后应重试当前批次写入 +- **AND** 系统不应在运行时创建或替换数据库 schema 对象 + +### Requirement: 建库与分区维护能力必须以外部脚本提供 +系统 MUST 在仓库根目录 `SQL_Script/` 提供可被外部程序调用的建库/分区维护脚本。 + +#### Scenario: 提供初始化脚本 +- **WHEN** 运维或其他程序需要初始化数据库结构 +- **THEN** 应可使用 `SQL_Script/01_init_schema.sql` 或 `SQL_Script/run_init.js` +- **AND** 脚本应支持幂等重复执行 + +#### Scenario: 提供分区预创建脚本 +- **WHEN** 运维或外部调度需要预创建分区 +- **THEN** 应可使用 `SQL_Script/02_create_partitions.sql` 或 `SQL_Script/run_ensure_partitions.js` +- **AND** 无需启动主服务进程即可执行分区维护 + ## ADDED Requirements ### Requirement: 分区表新增数组列与数组元素索�?系统 SHALL �?`heartbeat.heartbeat_events` 中新增用于存储电力与空调子设备的数组列,并为指定数组列提供数组元素级查询索引�? #### Scenario: 新增数组�?- **WHEN** 部署或升级数据库结构�?- **THEN** 表应包含 elec_address、air_address、voltage、ampere、power、phase、energy、sum_energy、state、model、speed、set_temp、now_temp、solenoid_valve