91 lines
3.1 KiB
PL/PgSQL
91 lines
3.1 KiB
PL/PgSQL
-- ============================================================
|
|
-- 光湖网站总大脑 · L4 核心 Schema
|
|
-- PostgreSQL 初始化脚本
|
|
-- 版本: v0.1.0 · Phase 1 骨架期
|
|
-- 签发: 霜砚(PER-SY001) · 授权: 冰朔(TCS-0002∞)
|
|
-- ============================================================
|
|
|
|
-- 启用 UUID 扩展
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
|
|
-- ============================================================
|
|
-- 页面表 — 类 Notion Page
|
|
-- 支持富文本、嵌套块、多级层次
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS pages (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
parent_id UUID REFERENCES pages(id) ON DELETE SET NULL,
|
|
title VARCHAR(500) NOT NULL,
|
|
icon VARCHAR(100),
|
|
content JSONB DEFAULT '[]'::jsonb,
|
|
properties JSONB DEFAULT '{}'::jsonb,
|
|
persona_owner VARCHAR(50),
|
|
access_level VARCHAR(20) DEFAULT 'normal'
|
|
CHECK (access_level IN ('public', 'normal', 'restricted', 'classified')),
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_pages_parent ON pages(parent_id);
|
|
CREATE INDEX idx_pages_persona ON pages(persona_owner);
|
|
|
|
-- ============================================================
|
|
-- 数据库表 — 类 Notion Database
|
|
-- 可配置属性、筛选、排序、视图
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS databases (
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
title VARCHAR(500) NOT NULL,
|
|
schema JSONB DEFAULT '{}'::jsonb,
|
|
views JSONB DEFAULT '[]'::jsonb,
|
|
persona_owner VARCHAR(50),
|
|
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_databases_persona ON databases(persona_owner);
|
|
|
|
-- ============================================================
|
|
-- 模块注册表 — 热插拔模块管理
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS modules (
|
|
id VARCHAR(50) PRIMARY KEY,
|
|
name VARCHAR(200) NOT NULL,
|
|
status VARCHAR(20) DEFAULT 'active'
|
|
CHECK (status IN ('active', 'dormant', 'deprecated')),
|
|
api_routes JSONB DEFAULT '[]'::jsonb,
|
|
persona_binding VARCHAR(50),
|
|
version VARCHAR(20) DEFAULT '0.1.0',
|
|
deployed_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_modules_status ON modules(status);
|
|
|
|
-- ============================================================
|
|
-- 人格体状态表
|
|
-- ============================================================
|
|
CREATE TABLE IF NOT EXISTS persona_state (
|
|
persona_id VARCHAR(50) PRIMARY KEY,
|
|
display_name VARCHAR(100) NOT NULL,
|
|
status VARCHAR(20) DEFAULT 'active'
|
|
CHECK (status IN ('active', 'dormant', 'battle')),
|
|
memory_ref VARCHAR(500),
|
|
last_active TIMESTAMPTZ DEFAULT NOW(),
|
|
routing_rules JSONB DEFAULT '{}'::jsonb
|
|
);
|
|
|
|
-- ============================================================
|
|
-- updated_at 自动更新触发器
|
|
-- ============================================================
|
|
CREATE OR REPLACE FUNCTION update_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER trigger_pages_updated_at
|
|
BEFORE UPDATE ON pages
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at();
|