🏗 システム構成(DB管理ツール)

pgAdmin 基幹サーバ側

  • 運用者がGUI操作でDBを管理・照会
  • 保守記録テーブルへの INSERT / SELECT
  • バッチ設定テーブルの参照・UPDATE
  • システムログ・受信ファイルテーブルの確認
  • 作業ログCSVエクスポート(クエリツール)
  • pgAgent ジョブスケジュール変更画面

pgAgent パソカサーバ側

  • PostgreSQL 上で動作するジョブスケジューラ
  • ETCパーソナルカード日確定明細バッチを管理
  • スケジュール(起動時間)をDBテーブルで管理
  • バッチ実行結果ログをDBに自動書き込み
  • pgAdmin から遠隔でスケジュール変更可能

📂 関連テーブル構成(PostgreSQL)

maintenance_log(保守記録)
log_idSERIALPK
start_atTIMESTAMPTZ
end_atTIMESTAMPTZ
operatorVARCHAR(50)
usb_key_noVARCHAR(20)
statusVARCHAR(20)
work_log(作業ログ)
work_idSERIALPK
log_idINTEGERFK
logged_atTIMESTAMPTZ
actionTEXT
resultVARCHAR(20)
detailTEXT
pgagent.pga_schedule(スケジュール)
jscidINTEGERPK
jscjobidINTEGERFK
jscstartTIMESTAMPTZ
jscminutesBOOL[60]
jschoursBOOL[24]
jscenabledBOOLEAN
作業者(遠隔保守担当)
pgAdmin 操作(基幹サーバ)
pgAdmin 自動処理
企画調整室
pgAgent(パソカサーバ)
pgAgent 自動実行
作業者遠隔保守担当 pgAdmin基幹サーバ側 企画調整室 pgAgentパソカサーバ側
▶ フェーズ 1:保守開始・ログ記録
▶ 遠隔保守 開始
STEP 1
pgAdmin:保守開始登録
pgAdmin クエリツールを開き、maintenance_log に開始情報を挿入。
pgAdmin 実行 SQL
保守開始レコードを INSERT
INSERT INTO maintenance_log (start_at, operator, usb_key_no, status) VALUES (NOW(), '担当者名', 'USB-XXX', 'IN_PROGRESS');
STEP 2
作業ログ記録開始
pgAdmin クエリツールにて work_log へのINSERT文で記録開始をマーク。
pgAdmin 実行 SQL
作業ログ:セッション開始記録
INSERT INTO work_log (log_id, logged_at, action, result) VALUES (:log_id, NOW(), 'SESSION_START', 'OK');
▶ フェーズ 2:受信ファイル確認
STEP 3
受信ファイル確認
pgAdmin でパソカDB の受信ファイルテーブルを照会。
pgAdmin 照会
受信ファイルを SELECT
SELECT * FROM pasoca_received_files WHERE receive_date = CURRENT_DATE ORDER BY received_at DESC;
STEP 4
受信ファイル存在確認
クエリ結果の件数で判断。
YES 受信ファイルあり
正常終了ルート
→ STEP 19(作業ログ停止)へジャンプ
pgAdmin SQL
正常終了を work_log に記録
INSERT INTO work_log (log_id, logged_at, action, result) VALUES (:log_id, NOW(), 'FILE_CHECK', 'FILE_EXISTS');
NO STEP 5
状況連絡
pgAdmin にて notice_log へ INSERT し企画調整室に通知。(メール通知連携 or 画面確認)
pgAdmin SQL
通知ログを INSERT・work_log に記録
INSERT INTO notice_log (log_id, notice_at, notice_type, message) VALUES (:log_id, NOW(), 'NO_FILE', '受信ファイルなし');
STEP 6
状況連絡受理
企画調整室担当が pgAdmin または通知メールで確認し、受理ステータスを UPDATE。
▶ フェーズ 3:日締め確認・バッチ起動時間変更(pgAgent スケジュール変更)
STEP 7
日締め確認
pgAdmin で事業者共通システムの日締めステータスを照会。
pgAdmin 照会
日締めステータスを SELECT
SELECT close_status, closed_at FROM daily_close_status WHERE business_date = CURRENT_DATE;
STEP 8
起動時間確認(デフォルト)
pgAdmin の pgAgent ジョブ管理画面またはクエリで現在スケジュールを確認。
pgAdmin 照会
pgAgent スケジュールを SELECT
SELECT jscid, jschours, jscminutes, jscenabled FROM pgagent.pga_schedule WHERE jscjobid = :etc_batch_job_id;
pgAgent 現在値
デフォルト起動時間:0700
jschours[7] = TRUE の状態を確認。
STEP 9
起動時間変更(pgAgent スケジュール)
pgAdmin の pgAgent GUI またはクエリで起動時間を変更入力。
条件:①0900〜1800 ②現在時刻+2分以上
STEP 10
起動時間確認(変更後)
変更後の jschours を SELECT で確認。
pgAdmin SQL
スケジュールを UPDATE
-- 例:09:00 に変更 UPDATE pgagent.pga_schedule SET jschours = ARRAY[ false,false,false,false,false,false,false, false,false,true, -- index 9 = 09時 false,false,false,false,false,false,false, false,false,false,false,false,false,false] WHERE jscjobid = :etc_batch_job_id;
※ CHECK制約またはトリガーで0900〜1800・現在時刻+2分を検証。
pgAgent SCHED
スケジュール変更を検知・反映
pga_schedule の更新をリアルタイムに認識し、次回起動時間を再設定。
STEP 11
起動時間確定(work_log 記録)
変更完了後、変更操作を作業ログに記録。
pgAdmin SQL
変更履歴を work_log に記録
INSERT INTO work_log (log_id, logged_at, action, result, detail) VALUES (:log_id, NOW(), 'BATCH_TIME_CHANGE', 'OK', '0700→0900');
▶ フェーズ 4:バッチ実行・確認
STEP 12 AUTO
日確定明細バッチ 自動起動
設定時刻になると pgAgent が pga_jobstep を実行。バッチ処理を開始。
-- pgAgent が自動実行 pga_jobstep → ETC日確定明細バッチ起動
STEP 13
システムログ確認
pgAdmin で pgAgent のジョブ実行ログを照会し正常終了を確認。
STEP 14
利用状況チェック
pgAdmin でパソカ利用状況テーブルを SELECT。
pgAdmin 照会
pgAgent 実行ログを SELECT
SELECT jlgid, jlgstart, jlgend, jlgstatus, jlgresult FROM pgagent.pga_joblog WHERE jlgjobid = :etc_batch_job_id ORDER BY jlgstart DESC LIMIT 5;
pgAdmin 照会
パソカ利用状況を SELECT
SELECT * FROM pasoca_usage_status WHERE target_date = CURRENT_DATE;
pgAgent AUTO
バッチ実行結果を pga_joblog に自動記録
実行開始/終了時刻・ステータス・結果を pgAgent が自動書き込み。
▶ フェーズ 5:起動時間デフォルト復元
STEP 15〜17
起動時間をデフォルト(0700)に復元
現在値確認 → pga_schedule を 0700 に UPDATE → 確認。
pgAdmin SQL
スケジュールをデフォルトに復元・変更履歴記録
-- index 7 = 07時 に戻す UPDATE pgagent.pga_schedule SET jschours[7] = true, jschours[9] = false -- 変更後時間を解除 WHERE jscjobid = :etc_batch_job_id; INSERT INTO work_log (log_id, logged_at, action, result, detail) VALUES (:log_id, NOW(), 'BATCH_TIME_RESTORE', 'OK', '変更後→0700');
pgAgent SCHED
デフォルトスケジュールに再設定
復元された jschours を認識し翌日から 0700 で起動。
▶ フェーズ 6:作業ログ停止・終了報告・保守終了記録
STEP 18
起動時間確認(デフォルト)
pgAdmin で jschours[7] = TRUE を確認。
pgAdmin 照会
スケジュール復元確認 SELECT
SELECT jschours[7] AS default_0700 FROM pgagent.pga_schedule WHERE jscjobid = :etc_batch_job_id;
STEP 19
作業ログ記録停止・CSV保存
pgAdmin クエリツールで work_log を抽出し CSV エクスポート。
pgAdmin SQL
作業ログを SELECT → CSV ダウンロード
SELECT * FROM work_log WHERE log_id = :log_id ORDER BY logged_at; -- ↑ クエリツールの「CSV保存」ボタンで出力
セッション終了レコードも INSERT して完結。
STEP 20
終了報告
pgAdmin にて notice_log へ終了報告レコードを INSERT(メール通知連携可)。
pgAdmin SQL
終了報告通知を INSERT
INSERT INTO notice_log (log_id, notice_at, notice_type, message) VALUES (:log_id, NOW(), 'COMPLETE', '作業終了報告');
STEP 21
終了報告受理
企画調整室が pgAdmin で notice_log を確認し、受理 UPDATE 実行。
STEP 22
pgAdmin:保守終了登録
maintenance_log に終了時刻を UPDATE。記録簿完了。
pgAdmin SQL
maintenance_log に終了時刻を UPDATE
UPDATE maintenance_log SET end_at = NOW(), status = 'COMPLETED' WHERE log_id = :log_id;
■ 遠隔保守 終了

📋 運用上の補足・注意事項

pgAgent スケジュール変更は即時反映:UPDATE 後に pgAgent デーモンが次チェックサイクル(通常10秒)で自動認識。別途サービス再起動は不要。
jschours 配列インデックス:0〜23 が 00時〜23時に対応。例:0700 = jschours[7]=true、0900 = jschours[9]=true
バリデーション実装:起動時間変更時の条件チェック(0900〜1800・現在+2分)は pgAdmin のクエリ実行前に CHECK トリガーまたはストアドプロシージャで実装を推奨。
CSV 出力:pgAdmin クエリツールの結果ペインで「Download as CSV」ボタンを使用。ファイル名に log_id と日付を含めること。
基幹サーバ↔パソカサーバ間接続:pgAdmin の「サーバ接続設定」にパソカ側 PostgreSQL の接続情報(ホスト/ポート/DB名)を事前登録すること。
企画調整室向け画面:pgAdmin を直接操作させる場合は読み取り専用ロールを付与。notice_log の受理更新は専用ストアドプロシージャ経由を推奨。