Files
Web_BLS_Heartbeat_Server/SQL_Script
XuJiacheng 3b98c6239b feat: 移除运行时代码中的数据库初始化与分区维护逻辑
- 新增备份 SQL 脚本 `01_init_schema.sql` 和 `02_create_partitions.sql`,用于数据库结构初始化和分区预创建。
- 新增 Node.js 脚本 `run_init.js` 和 `run_ensure_partitions.js`,支持通过外部程序调用进行数据库初始化和分区维护。
- 确保数据库初始化脚本支持幂等重复执行。
- 更新文档,说明新的执行顺序和使用方法。
- 移除运行时相关的数据库初始化和分区维护配置,简化服务职责。
- 保留写入失败时的缺分区兜底逻辑,确保服务稳定性。
2026-03-04 11:47:22 +08:00
..

SQL_Script

数据库初始化与分区维护脚本。与主服务完全独立可被任何工具psql / Node.js / cron / CI调用。

文件说明

文件 说明
01_init_schema.sql 建库Extension + Schema + 主表 + 索引 + 分区辅助函数(幂等,可重复执行)
02_create_partitions.sql 预创建分区(昨天 ~ 未来 30 天),直接用 psql 执行
run_init.js Node.js 脚本:执行 01_init_schema.sql
run_ensure_partitions.js Node.js 脚本:调用 ensure_partitions() 预创建指定日期范围分区

执行顺序(首次部署)

# 第一步:初始化 Schema建表 + 函数)
node SQL_Script/run_init.js

# 第二步:预创建分区(默认昨天 ~ 未来 30 天)
node SQL_Script/run_ensure_partitions.js

之后每天由外部 cron / 调度任务调用 run_ensure_partitions.js 即可。


run_init.js 用法

# 最简方式(从 .env 读取连接参数)
node SQL_Script/run_init.js

# 指定连接参数
node SQL_Script/run_init.js \
  --host=10.8.8.109 \
  --port=5433 \
  --user=log_admin \
  --password=yourpassword \
  --database=log_platform

run_ensure_partitions.js 用法

# 默认:昨天 到 未来 30 天
node SQL_Script/run_ensure_partitions.js

# 按 offset相对今天的天数偏移
node SQL_Script/run_ensure_partitions.js --start-offset=-1 --end-offset=60

# 按具体日期
node SQL_Script/run_ensure_partitions.js --start-date=2026-03-01 --end-date=2026-06-30

psql 直接执行

# Schema 初始化
psql -h 10.8.8.109 -p 5433 -U log_admin -d log_platform -f SQL_Script/01_init_schema.sql

# 预创建分区(默认昨天 ~ 未来 30 天)
psql -h 10.8.8.109 -p 5433 -U log_admin -d log_platform -f SQL_Script/02_create_partitions.sql

连接参数优先级

命令行参数 > 环境变量 > 根目录 .env 文件 > 默认值

支持的环境变量:

环境变量 说明
POSTGRES_HOST 主机,默认 127.0.0.1
POSTGRES_PORT 端口,默认 5432
POSTGRES_USER 用户名,默认 postgres
POSTGRES_PASSWORD 密码
POSTGRES_DATABASE 数据库名,默认 log_platform

定时分区维护cron 示例)

# 每天凌晨 01:00 自动创建未来 30 天分区
0 1 * * * cd /path/to/Web_BLS_Heartbeat_Server && node SQL_Script/run_ensure_partitions.js >> /var/log/partition_cron.log 2>&1