0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2026/07/02】エンジニア19日目:psqlのspool操作理解・初めて一から手順書を作成した話

0
Posted at

はじめに

日付:2026年7月2日(木)/ 19日目

午前はpsqlでのspool操作手順の確認、
午後は初めて一から手順書を作成するという
貴重な経験をした一日。

psqlでのspool操作

Oracleの「spool」機能と同様に、
psqlでもSQLの実行結果をファイルに保存できる。

目的:
DBの照会結果をファイルとして出力し、
作業証跡としてダウンロード後、サーバー上のファイルを削除する。

!(バックスラッシュ+エクスクラメーション)とは

psqlの中でLinuxコマンドを実行するには \! を先頭につける必要がある。

状態 コマンドの使い方
psql接続前(Linuxサーバー上) lspwd などそのまま使用可能
psql接続後(DBプロンプト内) \! ls\! pwd のように \! が必要

作業手順

# 1. BastionサーバーへSSH接続(ブラウザ経由)

# 2. psqlにログイン
PGPASSWORD=$(gcloud auth print-access-token) psql \
  "host=[ホスト名] port=[ポート番号] user=[USERNAME] dbname=[DB名] sslmode=require"

# 3. スキーマ設定・安全装置
SET SEARCH_PATH TO [スキーマ名];
\set AUTOCOMMIT off
\echo :AUTOCOMMIT

# 4. 現在のディレクトリ確認
\! pwd

# 5. ファイル一覧確認
\! ls -l

# 6. spool開始(出力先ファイルを指定)
\o [ファイル名].csv

# 7. SELECT文を実行(結果がファイルに書き込まれる)
SELECT ...;

# 8. spool終了
\o

# 9. ファイルが作成されたか確認
\! ls -l

# 10. エラーが出た場合はrollback
rollback;

# 11. ブラウザ右上のダウンロードボタンでファイル取得

# 12. サーバー上のファイルを削除
\! rm -i [ファイル名].csv

# 13. 削除確認
\! ls -l

全体の流れ

ブラウザ(ローカルPC)

│ ① SSH接続(クラウド提供のブラウザSSH)

Bastionサーバー(Linux)

│ ② psqlコマンドで接続

PostgreSQL DB

│ ③ \o コマンド(spool)で結果をファイルに保存

ファイル(.csv)→ ブラウザからダウンロード → サーバー上から削除

一言まとめ:
SSH → psql → spool(\o)の3層構造で
DBの結果をファイルとして取り出す作業。

気づき

Oracleでは「spool」と書くが、
psqlでは \o コマンドで同じことができる。
名前は違うが目的は同じ。
「ツールが違っても概念は同じ」という発見が面白かった。

初めて一から手順書を作成した

午後は、特定のエラーへの対応手順書を
一から作成する作業を担当した。

参考にできる既存の手順書はなく、
いくつかの事例資料だけを頼りに書き上げた。

エラーの概要

項目 内容
エラー種別 ファイルダウンロードエラー
原因 外部サービス上のファイルが削除されているにもかかわらず、システム側に参照情報が残っている
エラーメッセージ The requested resource does not exist

作業の流れ

① エラーメールの内容確認(調査票ID・ファイルIDを特定)

② BastionサーバーへSSH接続

③ psqlでDBにログイン

④ 事前クエリ実行(スキーマ設定・AUTOCOMMIT off)

⑤ 対象ファイルの照会(SELECT文でファイル情報を確認)

⑥ psqlからログアウト

⑦ 削除対象ファイルの特定(エラーメールのファイルIDと照合)

⑧ 管理画面からファイルを削除

⑨ 関係者へ通知

DBへの照会(SELECT文)

-- 事前クエリ
set search_path to [スキーマ名];
\set AUTOCOMMIT off
\echo :AUTOCOMMIT

-- 対象ファイルの照会
select
  rid, file_name, download_kubun,
  upload_date, download_date,
  expire_date, entity_file_name, file_id
from
  delivery_data
where
  rid = [RID];

照会結果の中で download_kubun = 2 のレコードが
外部サービス経由のファイルに該当する。

必要なDB権限

[x] read
[ ] write
[ ] sequence

手順書作成で意識したこと

ポイント 内容
初めて読む人でもわかる 専門用語には補足を入れる
番号で順序を明確に 「次に何をするか」が迷わないように
DB権限を冒頭に明示 作業前に必要な権限がわかるようにする
エラー時の対処も記載 rollbackなど異常系も手順に含める

感想

spoolという概念自体が初めてで、
さらにpsqlでは \o という別の書き方をすることも新鮮だった。
同じ意味なのに名前が違うというのが
エンジニアの世界らしいと感じた。

午後の手順書作成は、既存の手順書が一切ない状態から
事例資料だけを頼りに書き上げるのは
想像以上に大変だった。

「次の人が迷わないように」を意識しながら
一つひとつの手順を言語化する作業は、
自分自身の理解を深めることにもつながった。

これからレビューを受けて何度も修正することになるだろうが、
「自分が作った手順書がチームの役に立つ」と思うと
とてもやりがいを感じる。

少しずつでもチームに貢献できていることが本当に嬉しい。
明日は会食もあるので、今日も全力で駆け抜けた!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?