topic: db (PDO / SQL / マルチDB) / ch12

ch12 — PostgreSQL 固有の文法と機能

学習目標

  • SERIAL / BIGSERIAL で連番 ID を発行する (MySQL の AUTO_INCREMENT 相当)
  • \dtpg_tables でテーブル一覧を取得できる
  • RETURNINGINSERT / UPDATE / DELETE の結果値を 1 ステートメントで取得できる
  • データ型: SMALLINT / INTEGER / BIGINT / TEXT / VARCHAR(n) / TIMESTAMP / TIMESTAMPTZ / BOOLEAN を使い分けられる
  • 配列型 (TEXT[]) を扱える
  • JSONBJSON の違い (JSONB はインデックス可・バイナリ正規化済み) を説明できる

所要時間

スライド 6 分 + ドリル 3 問 = 約 1.5 時間

前提

  • L11 ch01〜ch10 完了
  • 特に ch10 (DSN 比較 / 複数 DB 接続) の理解が前提
  • 並列章として ch11 (MySQL 固有) を学ぶと比較で理解が深まる

ドリル

no 内容
01 SERIAL + RETURNING id で 1 ステートメント採番
02 TEXT[] 配列型 (SQLite では JSON テキストで代替)
03 JSONB のキー抽出 (SQLite では json_extract で代替)

採点用 DB について

ch10 と同じく、採点ランナーは SQLite を default に動かします。tests/setup.sql (SQLite 用) を一時 SQLite に流し込み、そのファイルパスを DOJO_DB_PATH に渡してきます。

PostgreSQL / MySQL での動作確認は tests/setup.pgsql.sql / tests/setup.mysql.sql を採点ランナーが優先選択します (DOJO_DB_DRIVER=pgsql 等を指定したとき)。

このため answer.phpdriver 別に分岐 することで「同じ問題を SQLite / MySQL / PostgreSQL で動かす」ことを実演します。

Docker で PostgreSQL を試したい場合

実際の PostgreSQL コンテナに接続して動作確認したい場合は、リポジトリ直下の docker/README.md を参照してください。

演習問題(3問)

  1. ドリル 01 — `SERIAL` + `RETURNING` で 1 ステートメント採番

    starter.php answer.php

  2. ドリル 02 — タグ配列を扱う (PostgreSQL `TEXT[]`)

    starter.php answer.php

  3. ドリル 03 — JSON 内の値で検索する (PostgreSQL `JSONB`)

    starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリ(nomuraya-dojo/php)を clone してください。