GIS開発研究所 > QGISで設備点検履歴を親子管理する方法|PostGISリレーション設計

QGISで設備点検履歴を親子管理する方法|PostGISリレーション設計

2026年7月25日

6分で読めます

QGISとPostGISで設備台帳と点検履歴を1対多で管理する方法を解説します。主キー・外部キー・入力フォーム・最新点検ビューを整え、履歴を上書きせず現場で安全に追加できるデータ構成と運用上の確認項目をSQL例付きで紹介し、再発防止まで扱います。

QGIS
PostGIS
リレーション
設備点検

道路、管路、標識、設備などをQGISで管理していると、「最新の点検結果を設備レイヤーに上書きしてよいのか」で迷うことがあります。上書きだけで運用すると、前回の状態や修繕の経緯が分からなくなってしまいます。

設備の基本情報と点検履歴は、別テーブルに分けて1つの設備に複数の点検履歴をひも付けるのが基本です。この記事では、PostGISのテーブル設計からQGISの入力フォームまで順番に説明します。

先に結論:設備と点検履歴を別テーブルにする

まず、次の2つにデータを分けます。

  • 設備テーブル 設備ID、名称、設置日、位置など、比較的変わりにくい情報
  • 点検履歴テーブル 点検日、判定、コメント、担当者など、点検のたびに増える情報

設備テーブルの主キーを、点検履歴テーブルの外部キーから参照します。これが1対多リレーションです。

設備1件
├─ 2026年4月の点検
├─ 2026年7月の点検
└─ 2026年10月の点検

PostGISで設備台帳と点検履歴を作る

次は最小構成の例です。設備の位置はassetsに持ち、点検履歴はinspectionsへ追加します。

CREATE TABLE assets (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  asset_code text NOT NULL UNIQUE,
  asset_name text NOT NULL,
  installed_on date,
  geom geometry(Point, 6677) NOT NULL
);

CREATE TABLE inspections (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  asset_id bigint NOT NULL
    REFERENCES assets(id)
    ON UPDATE CASCADE
    ON DELETE RESTRICT,
  inspected_on date NOT NULL,
  result text NOT NULL,
  inspector_name text,
  note text,
  created_at timestamptz NOT NULL DEFAULT now()
);

CREATE INDEX inspections_asset_id_idx
  ON inspections(asset_id);

ON DELETE RESTRICTを指定すると、点検履歴が残っている設備を誤って削除しにくくなります。設備削除と同時に履歴も消す運用ならCASCADEも使えますが、監査や過去確認が必要な業務では慎重に選びましょう。

QGISで1対多リレーションを設定する

PostGISの2テーブルをQGISへ追加したら、次の順で設定します。

  1. 「プロジェクト」「プロパティ」を開く
  2. 「リレーション」タブを選ぶ
  3. 「リレーションを追加」を押す
  4. 親レイヤーにassets、主キーにidを指定する
  5. 子レイヤーにinspections、外部キーにasset_idを指定する
  6. 分かりやすいリレーション名を付けて保存する

PostgreSQL側に外部キーを定義している場合、QGISの「リレーションを検出」から読み込めることがあります。公式ドキュメントでも、PostgreSQLやGeoPackageに保存されたリレーションを検出できると説明されています。

QGISの設備フォームから点検履歴を追加する

リレーションを設定すると、設備の地物フォーム内に関連する点検履歴が一覧表示されます。設備を地図上で選び、その画面から新しい点検履歴を追加できるようになります。

入力しやすくするには、点検履歴レイヤーの属性フォームも整えます。

  • inspected_onは初期値を現在日にする
  • resultは「良好・要観察・要修繕」などの選択式にする
  • inspector_nameは担当者マスタから選ぶ
  • noteは複数行入力にする
  • asset_idはフォーム上で直接変更させない

現場担当者が主キーや外部キーを意識しなくても入力できる画面にするのがポイントです。

設備点検履歴が登録できないときの確認

子レコードを追加するボタンが出ない

親子のレイヤーが両方ともQGISプロジェクトに読み込まれているか確認します。リレーションの親キーと子キーが逆になっていないかも見直しましょう。

保存時に外部キーエラーになる

点検履歴のasset_idに、存在しない設備IDが入っている可能性があります。QGISのリレーションフォームから追加すると、親設備のIDを引き継ぎやすくなります。

点検履歴を削除すると設備まで消える

PostGISの外部キー設定と、QGISのリレーション強度を確認します。「構成」タイプでは親子を一体として扱う動作が含まれるため、通常の履歴管理では「関連」タイプから検討すると分かりやすいです。

最新点検だけを一覧で確認する

履歴を分けると、設備ごとの最新結果を取り出す処理も必要になります。PostgreSQLでは、次のようなビューを作れます。

CREATE VIEW asset_latest_inspection AS
SELECT DISTINCT ON (a.id)
  a.id AS asset_id,
  a.asset_code,
  a.asset_name,
  i.inspected_on,
  i.result,
  i.inspector_name,
  a.geom
FROM assets a
LEFT JOIN inspections i ON i.asset_id = a.id
ORDER BY a.id, i.inspected_on DESC, i.id DESC;

このビューは確認用に使い、点検結果の登録は元のinspectionsテーブルへ行います。ビューを直接編集できるかは構成によって変わるため、入力先と表示用を分けると事故を減らせます。

本番運用では削除より無効化を検討する

設備の撤去後も点検履歴を残したい場合、設備レコードを削除せずretired_onactiveを持たせる方法があります。これなら、現役設備だけをQGISに表示しながら、過去の記録も保持できます。

**設備台帳は現在の状態、点検履歴は時間の流れを保存するデータです。**この2つを分けるだけで、QGISのフォームも集計も扱いやすくなります。

設備点検のデータ構造やQGIS入力画面の設計を整理したい場合は、GIS開発を無料相談する

参考資料

GISシステム開発・改善支援

既存GISの改善から新規開発まで相談できます

QGIS、PostGIS、GeoServer、MapLibre、GeoDjangoを使った現地調査基盤、Web地図、データ処理を支援します。

GIS開発の無料相談

同期・性能・地図表示の問題を相談できます

QGIS、PostGIS、GeoServer、MapLibre、GeoDjangoの構成を確認し、原因の切り分けと改善順を整理します。

著者
守高 成悟
守高 成悟

代表取締役 CEO

千葉県出身。10歳の頃からプログラミングを始め、ゲーム、Webサイト、ロボット、スマホアプリなどを制作。大阪大学基礎工学部情報科学科で情報工学と統計学を学び、大学時代はAIを研究。大学在学中にWeb広告代理店でのインターンや人材系Webサービスの立ち上げを経験し、卒業後はフリーランスエンジニアとしてGISシステム、データ基盤構築、Webシステムの開発に従事。10年以上のWebアプリ開発・データ分析経験を基に、2023年9月に株式会社ビットライトを設立し、現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援。

運営会社
株式会社ビットライト
株式会社ビットライト

顧客が本当に必要だった価値を、実装する。

現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援しています。

コーポレートサイトを見る