メインコンテンツまでスキップ

データベースモデル

AI スタックがデータをどこにどんな形で持つかを整理した文書です。ストレージは四つあり、 それぞれ役割が異なります。運用手順は データベース管理 を参照してください。

大半は AI が所有しているものではありません

PostgreSQL・Aster TSDB は PlantPulse プラットフォームのインストール分を共用で使います。AI スタックが自分の DB を立てるわけではありません。そのため「AI バックアップ」と「プラットフォームバックアップ」が重なります — どちらが何を 受け持つか整理しておかないと、両方とも漏れる区間が生じます。

ストレージ所有格納するもの
PostgreSQL pi · スキーマ coAI(プラットフォーム PG 内の別DB)チャット・インシデント・設定・MCP(コパイロット)
PostgreSQL pi · スキーマ dtAI(〃)外部システムコネクタ登録簿・バインディング・行動記録(デジタルスレッド)
PostgreSQL lightragAI(〃)LightRAG の文書処理状態(PGDocStatusStorage)
PostgreSQL rag_ingestAI(〃)文書投入パイプライン(rag-api)の状態 — 下記「PostgreSQL rag_ingest」
PostgreSQL litellmAI(〃)LiteLLM ゲートウェイのキー・使用量
Aster TSDB piAIフィーチャーストア・異常検知の算出物
Aster TSDB ppプラットフォーム(読み取り専用)原始センサー・アラーム・OEE
Neo4j plantpulse-neo4jAILightRAG ナレッジグラフ
Neo4j plantpulse-digital-thread-neo4jAIデジタルスレッドの工場グラフミラー — 参照のみ
QdrantAI文書埋め込みベクトル
lightrag-storage ボリュームAILightRAG の KV キャッシュ — ローカル JSON ファイル
lightrag-inputs ボリュームAIアップロードされた原本文書
プラットフォーム PG 内に AI の DB が「四つ」あります

AI は自分の PostgreSQL を立てず、プラットフォームの PostgreSQL を使います。その中に pi · lightrag · rag_ingest · litellm の四つの DB を作って(provision-platform-db.sh が 冪等に)使います。pi は AI アプリ群が共用する DB で、アプリごとにスキーマを一つ持ちます(co コパイロット · dt デジタルスレッド)。2026.09 以前の DB ch は起動時に pi.co に移されます → データベース管理 Aster TSDB · Valkey · RustFS · MQTT ブローカー(設備アラーム購読)も同様にプラットフォームのものを付けて使います — AI ボックスをサイジングする際はこの四つを別枠で見積もらないでください。


PostgreSQL pi.co — 会話と運用状態​

プラットフォーム PostgreSQL 内の別データベース pi のスキーマ co です (jdbc:postgresql://<platform-host>:5432/pi?currentSchema=co)。コパイロットはこのスキーマ一つだけを見て接続するので、 スキーマを付けていないテーブル名はすべて co になります。

2026.09 以前の ch と同じテーブルです

以前は DB ch の public にあったテーブルです。名前も形もそのままで、場所だけ pi.co に移りました。

グループテーブル
会話chats · chat_messages · prompts · prompt_history — chats.context は会話に固定した文脈(2026.10 再リリース)
チャット行動 · 回答品質(2026.10 再リリース)chat_action(チャット回答に載った草案提案1枚=1行 — 誰が・いつ・なぜ承認したか)・chat_turn_metric(回答したターンごとの遅延・トークン・モデル・引用数・根拠種類・👍👎、および結果マーク outcome — 空なら正常回答、no_answer 再試行しても空の回答、loop_cut 繰り返しを打ち切り)・chat_bench_run(ベンチ回次スコア)
ユーザーusers · user_roles · employees · web_push_subscription — employees.work_role は管理者が定める業務ロール(承認権限)、employees.home_role は旧画面で本人が選んでいた開始画面(2026.10 再リリース3 — 新しい画面では使いません)→ 業務ロール
インシデント(テーブル名は incident のまま)incident · incident_event · assignees
ウォッチ(条件監視 — 廃止された機能)watch · watch_run。画面刷新版からは作成も使用もしません。旧インストールにあったテーブルはそのまま残ります
異常検知運用anomaly_mute · hourly_anomaly · asset_tag_profile
MCP · ツールagent_tool_call_log — 人が承認した行動であれば approved_by に承認者が残ります。旧テーブル mcp_server · mcp_tool_pref · mcp_tool_call_log は 2026.10 再リリース(2026-10-20) で起動時に削除されます — サーバー · オン/オフ · 呼び出し記録の正本は MCP ゲートウェイ DB(pi の gw スキーマ)です
公開 APIapi_key
設定config · config_audit_log · metadata
新しいテーブル · カラムは起動時に自動生成されます

上記「2026.10 再リリース」テーブルとカラムはコパイロット起動時に CREATE TABLE IF NOT EXISTS · ADD COLUMN IF NOT EXISTS で 作成します。手動で実行するマイグレーションはありません。 chat_turn_metric には質問・回答原文はなく(原文は chat_messages)、chat_action には音声・回答本文はありません — ツール引数と結果番号のみです。

ツール呼び出し台帳 agent_tool_call_log

AI が呼び出したツールは一件も漏れずにここに残ります — 時刻・ユーザー・セッション・ツール名・ 出所 MCP サーバー・引数(秘密値は *** で隠す)・結果(ok · error · denied)・所要時間。 denied は承認ゲートが阻止した変更ツール呼び出しです → MCP mcp_tool_call_log は登録 MCP サーバー別の成功・所要統計のみなので、「誰が何を」はこのテーブルで確認します。

公開 API キー api_key

キーの平文は保存しません — ハッシュ(key_hash)と識別用の先頭文字(key_prefix)のみ保持します。 失効させても行は削除せず revoked_at を記録します。last_used_at が空であれば使われていない キーです → コパイロット管理コンソール

チャット履歴の正本はここ一つです

2026-07 改編前は Aster TSDB にも会話履歴がありました。今は**chat_messages 単一ソース**です。古い文書を見て Aster TSDB で探さないでください。


PostgreSQL pi.dt — デジタルスレッド登録簿​

デジタルスレッド API が所有するスキーマです。テーブルはサービス起動時に作成します。すべての文が dt. に 限定されており、他のスキーマには触れません。

グループテーブル
コネクタdt_connector · dt_connector_tool
バインディングdt_binding · dt_binding_log(運用者が定めたカラムバインディングとその変更記録 — 誰が・いつ・前後)
行動記録dt_action_log(承認を経て外部システムに送信した草案・要請)
Episodedt_episode · dt_episode_label
同一性宣言dt_identity · dt_identity_log(「この現場でキー A とキー B は同じものである」という運用者宣言とその変更記録 — 自動では付与されません)
コネクタ資格情報は暗号化キーなしでは復号できません

dt_connector の資格情報は PI_DT_SECRET_KEY で封印して保存されます。このキーを失うと DB を復旧しても 保存された資格情報が使えず、コネクタごとに再入力が必要です。ホストの env ファイルをバックアップする際に合わせて確保してください → デジタルスレッド


PostgreSQL rag_ingest — 文書投入状態​

rag-api が所有する DB です。テーブルは rag-api 起動時に作成します(冪等)。

グループテーブルいつ生成されるか
同期rag_asset_doc_sync · rag_sync_run · rag_asset_card常に
図面rag_drawing_doc · rag_drawing_chunk · rag_drawing_ident · rag_drawing_dim · rag_drawing_kg · rag_drawing_outboxDRAWING_INGEST_ENABLED=true のときのみ
映像 · 音声rag_media_job · rag_media_segment · rag_media_sidecar映像・音声を有効化したインストール(PI_MEDIA_ENABLED=true — rag-api 内では MEDIA_INGEST_ENABLED=true)のみ
  • rag_drawing_doc.source は図面がどこから来たかです — 管理コンソールからアップロードされたもの(MANUAL)と、プラットフォームの資産文書を取り込む同期が 入れたもの(PLATFORM、2026.10 再リリース3)。後者はプラットフォームが正本なのでコンソールから上書き・削除しません。
  • rag_drawing_dim は寸法一行ごとに上下限(upper_limit · lower_limit)とその根拠(limits_basis — 図面に記載された値か、 はめあい公式で計算した「公式推定」か)を持ちます。
  • rag_media_job は映像・音声ファイル一本=一行です(どこから来たか source・処理状態・試行回数・サムネイル数など)。管理コンソールの RAG › 索引 › 動画画面がこれを表示します → 動画 · 音声検索

図面原本の構造・プレビューと映像の書き起こしはテーブルではなくオブジェクトストレージバケット plantpulse-rag に置きます → データベース管理


Aster TSDB pi — フィーチャーストア​

時系列インサイトサービスが所有・生成する12個のテーブルです。接頭辞は tsi_ です。

グループテーブル
フィーチャーtsi_tag_feature_hourly · tsi_tag_feature_daily · tsi_asset_feature_hourly · tsi_asset_feature_daily
文脈·プロファイルtsi_asset_context_daily · tsi_asset_profile
異常·故障tsi_anomaly_embedding · tsi_failure_signature · tsi_precursor_alert
パイプラインtsi_pipeline_status · tsi_pipeline_history · tsi_backfill_status

テーブルはサービス起動時に冪等生成します。ただしキースペース pi 自体はアプリが作成し ません — インストールスクリプト(provision-platform-db.sh)の管轄です。

フィーチャーが空だと分析画面が丸ごと空になります

管理コンソールの異常検知・予測画面はすべてこれらのテーブルを読みます。結果が空であれば、モデル ではなくパイプラインをまず確認してください → 管理コンソールの Pipeline Status Run History(AI 管理コンソール)。

コパイロットのテーブルも同じキースペースにあります

コパイロットも pi に自分のテーブルを置きます(朝のカードなど)。2026.10 再リリースで構造化レポートの対応チェック状態を持つ PI_NAVIGATOR_ACTION_CHECK が追加され、コパイロット起動時に作成されます。

旧 pp.ti_* はありません

2026-07-30 に pp キースペースから pi に移し、旧テーブルは DROP しました。 旧名で照会しても出てきません。


Aster TSDB pp — プラットフォーム原始データ(読み取り専用)​

AI はプラットフォームが収集したデータを読むだけです。ここには書き込みません。

テーブル用途
tm_asset_data_based_second / _minute / _hour設備センサー時系列
tm_tag_pointタグポイント
tm_asset_alarmアラーム
tm_kpi_oee_historyOEE
tm_kpi_ram_history · tm_kpi_ems_historyRAM · EMS
tm_monitor_platform_statusシステムリソース(CPU・メモリ・ディスク)

パーティションキーが解像度ごとに異なります​

second : PRIMARY KEY ((asset_id, date, hour), timestamp)
minute : PRIMARY KEY ((asset_id, date), timestamp)
hour : PRIMARY KEY (asset_id, timestamp)
kpi : PRIMARY KEY ((asset_id, day), timestamp) -- tm_kpi_*_history

KPI 履歴(tm_kpi_*_history)の day は UTC 日付(yyyymmdd)です。現地の一日は UTC バケット二つにまたがるため、期間を UTC 日付のリストに展開してバケットごとに読みます。1行はその時刻までの オーダー累計なので行を加算しません。 詳細なルールは KPI テーブル にあります。

照会が遅い場合はまず解像度を見直してください

秒単位は設備・日付・時刻までパーティションに入ります。長期間を秒単位でスキャンするとパーティションを 数千個触ることになります。広い期間は _hour、狭い期間のみ _second で見てください。

プラットフォーム側の全体スキーマは プラットフォームデータベースモデル にあります。


Neo4j · Qdrant — ナレッジグラフとベクトル​

ストレージ格納するもの
Neo4j(plantpulse-neo4j)LightRAG のナレッジグラフ — 文書から抽出した個体・関係
Qdrant文書チャンクの埋め込みベクトル

デジタルスレッドの工場グラフミラーは別の Neo4j インスタンス(plantpulse-digital-thread-neo4j)にあります。 LightRAG のストレージではないため、以下の「四つ」には含まれません。

RAG エンジン(LightRAG)のストレージは四つに分かれています。 二つしか把握していないと復旧が食い違います。

何どこ設定
ベクトルQdrantLIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage
グラフNeo4jLIGHTRAG_GRAPH_STORAGE=Neo4JStorage
KV キャッシュlightrag-storage ボリュームのローカル JSONLIGHTRAG_KV_STORAGE 未設定 — LightRAG デフォルト値(JsonKVStorage)
文書処理状態プラットフォーム PG の lightrag DBLIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage

KV がローカル JSON なのは意図的にそうしてあるものです — インスタンス1台には十分で、 プラットフォームの Valkey に依存しなくても構いません。複数台に拡張する際は LIGHTRAG_KV_STORAGE=RedisKVStorage + REDIS_URI に切り替えます。

四つを「別々に」復旧すると索引が食い違います

文書処理状態のみ PostgreSQL にあります。PG だけ復旧して Qdrant・Neo4j を空のままにしておくと、 LightRAG は「すでに投入済みの文書」として扱い、再投入しません — 検索はずっと空手で 返ってきます。逆にグラフ・ベクトルだけ復旧すると状態が合わず、重複投入が発生します。

戻す際は四つを同じ時点に揃えるか、四つをすべて空にして原本から再投入してください。 原本は lightrag-inputs ボリュームにあります — このボリュームが事実上のバックアップであり、 これまで失うと索引を再生成する方法がありません。

オントロジーの概念は オントロジーを理解する を参照してください。


バックアップ範囲の整理​

ストレージ誰が取るかないとどうなるか
PostgreSQL pi(co · dt)AI 側で確保する必要ありチャット・インシデント・設定、コネクタ登録簿が消える
PostgreSQL lightrag · rag_ingestAI 側で確保する必要あり文書処理状態が消える — 上記 danger を参照
PostgreSQL litellmAIゲートウェイキー・使用量履歴が消える
Aster TSDB piAI 側で確保する必要ありフィーチャーが消え分析画面が空になる(再計算は可能だが時間がかかる)
Aster TSDB ppプラットフォームバックアップ—
Neo4j · QdrantAI文書索引が消える(原本から再生成可能)
デジタルスレッド Neo4jAI(bin/backup.sh がボリュームごと)ミラーが消える(原本から再構築可能)
lightrag-storage ボリュームAIKV キャッシュが消える(再生成可能)
lightrag-inputs ボリュームAI — 最も重要原本文書が消え、索引を再生成する方法がなくなる

手順は データベース管理 を参照してください。


関連文書​