第3回まで無料

データベース基礎(PostgreSQL)

MySQL 版と同じ順番で進みますが、PostgreSQL にしかない道具を毎回入れています。DISTINCT ON、= ANY(配列)、FILTER 句、キーセットページネーション、JSONB、SKIP LOCKED、MERGE、そして EXPLAIN の Buffers。全30レッスンで、制約で守れることはアプリで守らない設計まで。

カリキュラム

全30レッスンを6つの章に分けています。第1章から順に進めるのがおすすめですが、 いま困っている範囲だけを拾い読みしてもかまいません。 ※ SQL はブラウザ内で実行できません。手元に PostgreSQL 18(16・17 でもほぼ同じ)を入れて、第1回のサンプルデータを読み込んで試してください。

Chapter 1 — PostgreSQL を動かす(第1〜3回)

psql で接続し、スキーマとテーブルを作り、INSERT した行を RETURNING でそのまま受け取るところまで。MySQL の「データベース」が、ここでは「スキーマ」であることから始めます。

Chapter 2 — SELECT を使いこなす(第4〜8回)

「カテゴリごとに1件」を1文で書ける DISTINCT ON、IN 句のプレースホルダを作らずに済む = ANY(配列)、NOT IN に NULL が1つ混ざると0件になる話、そして OFFSET をやめる方法。

Chapter 3 — 集計と結合(第9〜15回)

CASE WHEN で数えるのをやめる FILTER 句から、GROUP BY と HAVING、JOIN の重複、LATERAL、EXISTS、そして WITH が最適化の壁ではなくなった話まで。

Chapter 4 — 関数とデータの更新(第16〜19回)

ウィンドウ関数のフレーム、timestamptz と BETWEEN の落とし穴、ON CONFLICT による UPSERT と COPY での大量投入、そして TRUNCATE も ROLLBACK できるという話。

Chapter 5 — 壊さないための設計(第20〜25回)

分離レベルとアボートしたトランザクション、SKIP LOCKED で足りるジョブキュー、numeric と uuidv7、jsonb には効かないもの、制約と正規化。

Chapter 6 — 速さと運用(第26〜30回)

インデックスの種類と効く条件、EXPLAIN は時間ではなく Buffers を見る話、VACUUM と統計情報、ロールと権限とバックアップ、そして psycopg でアプリから使うところまで。

全30レッスンを終えたら、同じ題材を MySQL で見る データベース基礎(MySQL)へ。アプリ側から使うなら FastAPI 入門や Django 入門が続きです。メンバーシップで全コースが解放されます。