# SQL_Script

用于**独立于业务服务**的数据库初始化与分区管理。

> 目标：主服务 `bls-rcu-action-backend` 只负责消费 Kafka 与写库，不再承担任何建库/建表/建分区职责。

## 文件说明

- `init_rcu_action.sql`
  - 初始化 `rcu_action.rcu_action_events` 主表与索引
- `init_room_status.sql`
  - 初始化 `room_status.room_status_moment` 主表与索引
- `partition_rcu_action.sql`
  - `rcu_action` 按天 RANGE 分区 SQL 模板
- `partition_room_status.sql`
  - `room_status` 按 `hotel_id` LIST 分区 SQL 模板
- `db_manager.js`
  - Node 调用入口（CLI + 可 import）

## 环境变量

与主服务统一：

- `DB_HOST` / `POSTGRES_HOST`
- `DB_PORT` / `POSTGRES_PORT`
- `DB_USER` / `POSTGRES_USER`
- `DB_PASSWORD` / `POSTGRES_PASSWORD`
- `DB_DATABASE` / `POSTGRES_DATABASE`
- `DB_SSL=true|false`
- `DB_ADMIN_DATABASE`（可选，默认 `postgres`）

## 命令行调用

在 `bls-rcu-action-backend` 目录执行：

- `npm run db:init:all`
  - 创建数据库（若不存在）+ 初始化两套主表
- `npm run db:init:rcu-action`
- `npm run db:init:room-status`
- `npm run db:partition:rcu-action`
  - 默认预建未来 30 天分区
- `npm run db:partition:room-status -- 1001`
  - 为 hotel_id=1001 建分区

## 其他程序直接 import

```js
import {
  initAll,
  ensureDatabase,
  ensureRcuPartitions,
  ensureRoomStatusPartition
} from '../SQL_Script/db_manager.js';

await initAll();
await ensureRcuPartitions(45);
await ensureRoomStatusPartition(1001);
```
