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

データベース管理

データベース構成​

PlantPulse AI は6個のデータベースを使用し、それぞれ異なる目的で活用されます。

データベース用途データ種別
PostgreSQLリレーショナルメタデータユーザー情報、チャット履歴、RAGメタ、フィーチャーストア
Aster TSDB時系列保存センサーデータ、コパイロットタスク、推論ヒストリー
Neo4j(2インスタンス)グラフデータLightRAG ナレッジグラフ・デジタルスレッドの工場グラフミラー
Qdrantベクトル保存文書埋め込み、設備フィーチャーベクトル
Valkey (Redis)キャッシュセッション、一時データ、検索キャッシュ
RustFSオブジェクト保存文書ファイル、画像、レポート

PostgreSQL​

データベース一覧​

AI は自分の PostgreSQL を立ち上げず、プラットフォームの PostgreSQL の中に4つの DB を作って使います (provision-platform-db.sh がなければ作成し、あれば飛ばします — べき等)。

データベース使用サービス
piAI アプリの DB — アプリごとにスキーマ一つ:co = AI Chat Web(ユーザー・チャット履歴・アプリ・設定)、dt = デジタルスレッド(コネクタレジストリ)
lightragLightRAG の文書処理状態(doc_status)
rag_ingest文書取り込みパイプライン(rag-api)の状態。図面・映像収集を有効にすると、その表(rag_drawing_*・rag_media_*)も起動時にここに作成されます
litellmLiteLLM ゲートウェイのキー・使用量

接続アカウントはプラットフォーム PG のアカウント(PP_PG_USER)です — AI 専用アカウントは別にありません。 pi の2つのスキーマもこのアカウントで接続します。表を public には置きません。

2026.09 以下から上げると — ch が pi.co へ移されます​

2026.09 以下ではコパイロット表が DB ch の public にありました。2026.10 は起動時に bin/migrate-pg-ch-to-pi.sh が compose より先に 動いてこれを移します — install・up・update・ compose-up がすべて同じ順序を踏むため、別途呼ぶ必要はありません。

  1. コパイロット・デジタルスレッドコンテナを停止します。
  2. ch に残ったセッションを整理します — ch に接続されたアプリアカウント(PP_PG_USER)のセッションのみ切断します。
  3. 1つのトランザクションで public のオブジェクトを新しいスキーマ co へ移します。
  4. ALTER DATABASE ch RENAME TO pi。
状態動作
pi のみ存在・両方とも存在しない何もしない
ch のみ存在上記の手順で移行
ch と pi が両方存在拒否し、何も変更しません
ch の public と co の両方にオブジェクトが存在拒否(手動で半分移した痕跡)
cd /opt/kopens/plantpulse-ai-docker
bin/migrate-pg-ch-to-pi.sh --check # 미리 보기 — 아무것도 바꾸지 않습니다
bin/migrate-pg-ch-to-pi.sh --rollback # 되돌리기 — pi.co → ch.public, 이름을 ch 로
移行スクリプトはダンプを取りません

アップグレード前に ch を pg_dump に一度ダンプしておいてください。プラットフォーム PG のディスク・保存はプラットフォームの管轄であり、 このスクリプトが代わりに行うものではありません。ロールバック後は以前のバージョンの compose とコパイロットイメージで立ち上げる必要があります — 新しい compose で立ち上げると、すぐに再度移行されます。

管理​

# PostgreSQL 접속 — 코파일럿 스키마
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -d pi -c 'SET search_path TO co' -c '\dt'

# 디지털 스레드 스키마
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -d pi -c '\dt dt.*'

# 데이터베이스 목록 확인
psql -h <플랫폼 PG 호스트> -U <PP_PG_USER> -c '\l'

Aster TSDB​

キースペース​

キースペース用途
piPlantPulse AI メイン(コパイロットタスク、推論ヒストリー)

管理​

# Cassandra CQL 접속
cqlsh 127.0.0.1 9042 -u cassandra -p cassandra

# 키스페이스 목록
DESCRIBE KEYSPACES;

# 테이블 목록
USE pi;
DESCRIBE TABLES;
備考

Aster TSDB キースペースは初回起動時に db/cassandra/support/keyspace-create.sh スクリプトで自動生成されます。


Neo4j​

2026.10 から Neo4j が2つ立ち上がります。同じイメージでアカウント(PI_NEO4J_USER・PI_NEO4J_PASSWORD)も同じですが、 格納するものと開かれる場所が異なります。

コンテナ格納するものボリュームホストポート
plantpulse-neo4jLightRAG ナレッジグラフpi-neo4j-data7474・7687
plantpulse-digital-thread-neo4jデジタルスレッドの工場グラフミラー(Dt*) — 参照のみ、本文なしpi-digital-thread-neo4j-dataなし

Neo4j Community は DB を追加作成したり役割で権限を分けたりできないため、2つのサービスを確実に分離するために インスタンスを分けました。デジタルスレッド側はデジタルスレッド API のみが compose ネットワーク内で接続し、メモリ上限 (ヒープ 512 MB・ページキャッシュ 256 MB)が設定されています。

パスワードは bin/passwd.sh が2つのインスタンスを同時に変更します

アカウントが1つなので片方だけ変更しないでください → パスワード・APIキー変更

接続情報 — plantpulse-neo4j​

項目値
Browser URLhttp://<サーバーIP>:7474
Bolt URIbolt://127.0.0.1:7687
ユーザーneo4j
パスワードneo4j123

管理​

Neo4j Browser(http://<サーバーIP>:7474)で Cypher クエリによりグラフを管理します:

// 노드 타입별 카운트
MATCH (n) RETURN labels(n), count(n) ORDER BY count(n) DESC;

// 관계 타입별 카운트
MATCH ()-[r]->() RETURN type(r), count(r) ORDER BY count(r) DESC;

デジタルスレッド側 — plantpulse-digital-thread-neo4j​

ポートが開いていないため Browser からは入れません。状態は管理コンソールのデジタルスレッド → グラフミラー 画面(Neo4j 探針・ラベル別ノード数)で確認します。ミラーは原本(プラットフォーム台帳・イベント)から 再生成できるコピーです → デジタルスレッド


Qdrant​

接続情報​

項目値
REST APIhttp://127.0.0.1:6333
Dashboardhttp://127.0.0.1:6333/dashboard
API Keyqdrant-key-123

コレクション​

コレクション用途
(LightRAG 自動生成)RAG 文書ベクトル(LightRAG が管理)

RustFS​

接続情報​

項目値
APIhttp://127.0.0.1:9000
Consolehttp://127.0.0.1:9001
Access Keyminio
Secret Keyminio123!

バケット​

バケット用途
plantpulse-ragrag-api のオブジェクトストレージ1つ。接頭辞で区別します — manual/ 管理コンソールから手動でアップロードした文書原本、drawings/ 図面構造とページプレビュー(図面収集を有効にした場合)、media/ 映像・音声再生版と書き起こし(映像収集を有効にした場合)、migration/ 旧バケット移行完了マーク。バケット名は compose のデフォルト値で、同じプラットフォームを AI インストールが2つ共有する場合のみ、2つ目のインストールにホスト env RAG_S3_BUCKET で別名を与えます → 環境変数設定
2026.10 以前の rag-manual-docs は自動的に移行されます

以前のバージョンは手動アップロードした原本を rag-manual-docs バケットに置いていました。2026.10 の rag-api は起動時に裏でそのオブジェクトを plantpulse-rag の manual/ の下へコピーします。新しい場所にすでに存在する場合は上書きせず、旧バケットは読み取り専用のため旧イメージに 戻しても引き続き読み取れます。進捗状況は rag-api /api/v1/config の object_store_migration 項目で確認します。


データ保存パス​

AI スタックのローカル状態はホストディレクトリではなく、名前付きの docker ボリュームにあります。 ホストでパスを探そうとしないでください — docker volume inspect で確認します。

ボリューム内容失うと
pi-lightrag-inputsアップロードされた原本文書索引を再生成する方法がない
pi-lightrag-storageLightRAG KV キャッシュ(ローカル JSON)再生成可能
pi-qdrant-data文書埋め込みベクトル原本から再生成可能
pi-neo4j-dataLightRAG ナレッジグラフ原本から再生成可能
pi-digital-thread-neo4j-dataデジタルスレッドの工場グラフミラー原本から再構築可能 — ただしプラットフォームのイベントを再読込する必要があるため復元にはかなり時間がかかる
pi-ttm-tuned-models現場データでインストールごとに学習した時系列モデルその現場データなしには再作成できない
pi-pp-proxy-certsプロキシのTLS 証明書顧客が投入した実際の証明書であれば再取得が必要
pi-phoenix-dataLLM 呼び出しトレース過去のトレースが失われる
pi-registry-dataローカルイメージレジストリ(registry プロファイルを有効にしたノードのみ)イメージを再投入する必要がある
pi-asr-audio書き起こしサービングが読む音声ライブラリ(映像・音声を有効にしたインストールのみ)失うものはない — plantpulse-asr-audio が起動のたびに再生成する

bin/backup.sh が受け取るもの​

compose ファイルに宣言されたボリューム全部を受け取ります — リストを別途記載しません。除外するのは再生成可能な ログとキャッシュ(copliot-web-logs・insight-api-logs・llm-cache・emb-cache・ rerank-cache・asr-cache)と、起動のたびに再生成される書き起こし音声ライブラリ(asr-audio)のみです。registry-data はそのプロファイルを有効にしたノードにのみ存在するため、あれば受け取り、なければスキップします。

cd /opt/kopens/plantpulse-ai-docker/bin
./backup.sh --list # 볼륨마다 backup · optional · exclude 판정만 찍는다
./backup.sh # 전부 → /data1/pp-backup/YYYYMMDD/<볼륨>.tar.gz
COMPONENT=neo4j-data ./backup.sh # 하나만
オプションデフォルト値意味
BACKUP_ROOT/data1/pp-backupバックアップの保存先
BACKUP_RETENTION_DAYS30それより古い日付ディレクトリを削除する — その回がすべて成功したときのみ
以前は4つだけ受け取っていました

2026.09 以前の backup.sh は手動で指定した4つのボリューム(neo4j-data・qdrant-data・lightrag-storage・ lightrag-inputs)のみを受け取っており、TLS 証明書ボリュームが抜けていました。 現在は compose からリストを抽出するため、 ボリュームが新しくできればデフォルトでバックアップされます。

稼働中のまま取ったバックアップは完全に一貫していない可能性があります

書き込み途中のコピーになる可能性があります。アップグレード直前のような一貫したバックアップが必要な場合は bin/compose-down.sh で停止してから実行してください。復元も compose を停止した状態で行います(例は bin/backup.sh の冒頭にあります)。

PostgreSQL・Aster TSDB・Redis・RustFS はプラットフォームのものであるため、このスクリプトは受け取りません — プラットフォームのバックアップ手順に従います。


バックアップ推奨事項​

対象方法周期
PostgreSQLpg_dump日1回
Neo4jneo4j-admin dump日1回
RustFSrc mirror日1回
QdrantSnapshot API週1回
/etc/kopens/plantpulse-ai.envファイルコピー — 🔴 PI_LITELLM_SALT_KEY がここにあります変更時
AI ローカルボリュームbin/backup.sh(上記)日1回