#インフラ
447 件の記事
timestamptz の罠まとめ — PostgreSQL の時刻処理で間違えやすいこと
PostgreSQL の時刻処理の実践的な罠を集めました。timestamptz がタイムゾーンを保存するという誤解、結果がセッションの TimeZone によって違って見える原理、AT TIME ZONE が型によって逆に動く二重性、date_trunc・日付グルーピングが真夜中の基準をどこに置くかで変わる問題、未来の予定は timestamptz だけでは足りない理由(タイムゾーン規則の変更)、now() と clock_timestamp() の違いまで扱います。
Terraform 実践 #6 シークレット管理 — SSM vs Secrets Manager、write-only 引数
シークレットの保管先として SSM Parameter Store と Secrets Manager をコストと機能で比較して選択基準を立て、Terraform 1.11 の ephemeral リソースと write-only 引数で DB パスワードが plan にも state にも残らない構成を作ります。アプリケーションがシークレットをランタイムに読む流れまで設計し、前回の平文問題を構造的に解決します。
UUID vs bigint 主キー — 性能差の実体と uuidv7
主キー論争の定番である UUID vs bigint を、実測できる根拠で整理します。bigint が既定値である理由(サイズ・挿入の局所性・結合コスト)、UUID v4 がインデックスに無作為に挿入されて書き込みとキャッシュ効率を落とす原理、時系列順でその問題をほぼ解消した uuidv7 と PostgreSQL 18 の組み込み関数、uuidv7 に残るトレードオフ(生成時刻の露出・16 バイト)、そして内部 bigint + 外部 UUID の併用設計まで扱います。
N+1 クエリ問題 — 症状、検出、解決まで
ORM を使うサービスが遅くなる最もよくある原因、N+1 クエリを扱います。一覧 1 つにクエリが 101 回飛ぶ構造ができる原理(遅延ロード)、アプリケーションのログと pg_stat_statements の calls で検出する方法、JOIN・IN の一括ロード・ORM の即時ロードオプションという 3 つの解法、そして「画面が必要とするデータをクエリ数ではなく形で設計する」という予防原則まで扱います。
PostgreSQL upsert の定石 — ON CONFLICT の使い方と罠
「あれば更新、なければ挿入」を競合状態なしに処理する ON CONFLICT を扱います。SELECT してから INSERT する方式が同時実行で壊れる理由、DO NOTHING と DO UPDATE の使い方、EXCLUDED で新しい値を参照する方法、衝突判定の対象(ユニーク制約)を明示すべき理由、値が同じでも行がロックされ書き換えられるコスト、MERGE との関係、そしてシーケンスが飛ぶ現象まで扱います。
Terraform 実践 #4 ALB と Auto Scaling — launch template、ターゲットグループ、スケーリングポリシー
単一の EC2 インスタンスをロードバランサーの後ろの Auto Scaling グループに昇格させます。インスタンス定義を launch template に移し、ALB とターゲットグループ、リスナーをつないだうえで、CPU のターゲット追跡スケーリングポリシーまで設定します。検証用の単一インスタンスをコードから削除して IaC のリソース削除の流れを確認し、ブラウザで最初のレスポンスを受け取ります。
pgvector 実践 — PostgreSQL でベクトル検索を運用するときに知っておくこと
埋め込み検索を別のベクトル DB を使わずに PostgreSQL で運用する実践ガイドです。vector 型と距離演算子、HNSW インデックスが既定値である理由と IVFFlat との比較、フィルタ条件と一緒に使うときの取りこぼし問題と反復インデックススキャン(0.8.0)、halfvec でサイズを半分にする方法と 4000 次元への対応、そして「専用ベクトル DB が必要になるのはいつか」の判断基準まで扱います。
PostgreSQL vs MySQL — 2026 年に新規プロジェクトならどちらか
2 つのオープンソース RDBMS の選択基準を整理します。結論は「新規プロジェクトは特別な理由がなければ PostgreSQL、すでに MySQL エコシステムの上に立っているなら MySQL を維持」です。MySQL 8.0 サポート終了(2026-04)と 8.4 LTS への移行時期、機能の幅(JSONB・ウィンドウ関数・拡張)と MVCC 実装の違い、レプリケーションのエコシステムの成熟度の差、そしてどちらを選んでもいい場合まで、判断基準を扱います。