一般知識の要点
内容の確認日: 2026-10-29
この分野は出題範囲の S1 (一般知識) に当たり、50 問中およそ 8 問 (S1.1 OSS-DB の一般的特徴 4 問・S1.2 リレーショナルデータベースに関する一般知識 4 問) が出題されます。
S1.1 は PostgreSQL そのものの知識 (ライセンス・コミュニティ・バージョンとサポート)、S1.2 は特定の製品によらないデータベースの基礎 (関係モデル・SQL の分類・正規化) です。暗記の比重が大きい分野ですが、数字や用語の取り違えを狙った選択肢が多いので、正確に覚えましょう。
ライセンスとコミュニティ
PostgreSQL は、BSD・MIT と同じ系統の緩やかな PostgreSQL License で配布されています。著作権表示とライセンスの文言を残せば、商用を含めて自由に使用・改変・再配布でき、改変したソースコードを公開する義務もありません。GPL のような「改変したらソースを公開する」条件や、有償の商用版はありません。
開発は PostgreSQL Global Development Group (PGDG) というコミュニティが行っています。世界中の個人と企業の開発者が参加し、特定の 1 社が支配しているわけではありません。開発の議論はメーリングリスト (pgsql-hackers など) で行われ、誰でも無料で参加できます。日本には 日本PostgreSQLユーザ会 (JPUG) があります。
不具合は、公式サイトの報告フォームか pgsql-bugs メーリングリストで報告します。GitHub のリポジトリはミラーなので、Issue や Pull Request は受け付けていません。セキュリティの脆弱性は、公開の場ではなく専用の窓口 (security@postgresql.org) に報告します。
バージョン番号・リリース・サポート
PostgreSQL 10 からは、バージョン番号の 1 つ目の数字がメジャーバージョン、2 つ目がマイナーバージョン です (14.24 なら、メジャー 14 の 24 回目のマイナーリリース)。9.6 以前は先頭の 2 つの数字 (9.6) がメジャーバージョンでした。
・メジャーバージョン: おおむね年に 1 回リリースされ、最初のリリースから 5 年間 サポートされる ・マイナーリリース: 少なくとも 3 か月に 1 回。不具合とセキュリティの修正だけで、新機能やデータの形式の変更はない
マイナーバージョンアップは、サーバーを停止してプログラムを入れ替え、起動し直すだけで済みます。コミュニティは、常に最新のマイナーリリースを使うことを推奨しています。メジャーバージョンアップでは内部の形式が変わることがあるので、pg_dump でのダンプとリストア、pg_upgrade、ロジカルレプリケーションのいずれかで移します。
サーバーのバージョンは SQL で確かめられます。version() は文字列、設定項目の server_version_num は「メジャーバージョン × 10000 + マイナーバージョン」の数値 (14.24 なら 140024) なので、10000 で割るとメジャーバージョンが分かります。
SELECT current_setting('server_version_num')::integer / 10000;psql -A -t -P null=NULL -f example.sql 14
PostgreSQL の主な特徴
・マルチプロセス: 親プロセス (postmaster) が接続を受け付けるたびに、その接続専用のバックエンドプロセスを起動する (スレッドではない)
・MVCC (多版型同時実行制御): 更新中の行も更新前の版が読めるので、読み取りと書き込みが互いをブロックしない
・拡張性: 拡張 (extension) を CREATE EXTENSION でデータベースごとに組み込める。データ型・関数・インデックスの種類も追加できる
・標準的な機能: 外部キー・トリガー・ビュー・ストアドプロシージャ・パーティション・レプリケーションなど
関係モデルと SQL の分類
関係モデルでは、表を リレーション、行を タプル、列を 属性、列が取りうる値の集合を 定義域 と呼びます。関係演算のうち、列を取り出すのが 射影、条件に合う行を取り出すのが 選択 です。
SQL は次の 3 つに分けられます。
・DDL (データ定義言語): CREATE・ALTER・DROP など。テーブルやインデックスなどの構造を定義する
・DML (データ操作言語): SELECT・INSERT・UPDATE・DELETE。データを読み書きする
・DCL (データ制御言語): GRANT・REVOKE。権限を管理する
SQL では、二重引用符で囲まない識別子 (テーブル名・列名) は 小文字に変換 されます。二重引用符で囲むと大文字小文字がそのまま残り、以後も二重引用符で参照する必要があります。文字列の値は単一引用符で囲みます。
CREATE TABLE Item (Id integer, "Name" text);SELECT column_name FROM information_schema.columns WHERE table_name = 'item' ORDER BY ordinal_position;psql -A -t -P null=NULL -f example.sql id Name
正規化
正規化は、データの重複をなくし、更新のときの矛盾 (更新時異常) を防ぐために表を分けることです。
・第 1 正規形: 列の値に繰り返しがない (「電話番号 1・電話番号 2…」のような列の繰り返しは、別の表の行に分ける) ・第 2 正規形: 第 1 正規形で、主キーの一部だけで決まる列 (部分関数従属) がない ・第 3 正規形: 第 2 正規形で、主キー以外の列を経由して決まる列 (推移的関数従属) がない
例えば、主キーが (受注番号, 商品コード) の表に、商品コードだけで決まる商品名があれば、第 2 正規形ではありません。主キーが社員番号の表に、部署コードで決まる部署名があれば、第 3 正規形ではありません。どちらも、従属している列を別の表に分けます。
NULL と三値論理
NULL は「値がない・不明」を表し、NULL と値を比べた結果は真でも偽でもない NULL (不明) になります。WHERE 句は結果が真の行だけを残すので、比較の結果が NULL の行は含まれません。NULL かどうかは IS NULL で調べます。
CREATE TABLE t (x integer);INSERT INTO t VALUES (1), (NULL), (3);SELECT count(*) FROM t WHERE x <> 1;SELECT count(*) FROM t WHERE x IS NULL;SELECT NULL = NULL, true OR NULL, false AND NULL;psql -A -t -P null=NULL -f example.sql 1 1 NULL|t|f
NULL = NULL も NULL です。一方、OR は片方が真なら全体が真、AND は片方が偽なら全体が偽と決まるので、NULL を含んでも結果が決まります。
試験でよくある引っかけ
PostgreSQL License は GPL ではない
改変したものを配布しても、ソースコードの公開は求められません。商用版・有償ライセンスもありません。
バージョン番号の読み方
10 以降は 1 つ目の数字がメジャーバージョンです (14.24 のメジャーは 14)。9.6 以前は 9.6 までがメジャーです。
サポート期間は 5 年
各メジャーバージョンは、最初のリリースから 5 年間修正版が出ます。LTS のような特別な版はありません。
マイナーアップでダンプは不要
マイナーバージョンアップはプログラムの入れ替えだけです。
pg_dump・pg_upgradeが必要なのはメジャーバージョンアップです。GRANT・REVOKEは DCLDDL (
CREATEなど) や DML (SELECTなど) と取り違えないようにします。第 2 正規形と第 3 正規形
主キーの一部で決まる列が残っていれば第 2 正規形ではなく、主キー以外の列で決まる列が残っていれば第 3 正規形ではありません。
NULLとの比較x <> 1やx = NULLではNULLの行は選ばれません。IS NULL・IS DISTINCT FROMを使います。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- LPI-Japan「OSS-DB Silver」(出題範囲)
- PostgreSQL「Versioning Policy」
- PostgreSQL「License」
- PostgreSQL 14 文書「比較関数および演算子」
コード例は、PostgreSQL 14 で実際に実行して結果を確認しています。