topic: db (PDO / SQL / マルチDB) / ch12
ch12 — PostgreSQL 固有の文法と機能
学習目標
SERIAL/BIGSERIALで連番 ID を発行する (MySQL のAUTO_INCREMENT相当)\dtとpg_tablesでテーブル一覧を取得できるRETURNING句 でINSERT/UPDATE/DELETEの結果値を 1 ステートメントで取得できる- データ型:
SMALLINT/INTEGER/BIGINT/TEXT/VARCHAR(n)/TIMESTAMP/TIMESTAMPTZ/BOOLEANを使い分けられる - 配列型 (
TEXT[]) を扱える JSONBとJSONの違い (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.php は driver 別に分岐 することで「同じ問題を SQLite / MySQL / PostgreSQL で動かす」ことを実演します。
Docker で PostgreSQL を試したい場合
実際の PostgreSQL コンテナに接続して動作確認したい場合は、リポジトリ直下の docker/README.md を参照してください。
演習問題(3問)
-
ドリル 01 — `SERIAL` + `RETURNING` で 1 ステートメント採番
-
ドリル 02 — タグ配列を扱う (PostgreSQL `TEXT[]`)
-
ドリル 03 — JSON 内の値で検索する (PostgreSQL `JSONB`)
サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリ(nomuraya-dojo/php)を clone してください。