PostgreSQL配列型(ARRAY)を完全解説!初心者でもわかるデータ型の基本と使い方
生徒
「PostgreSQLの配列型って聞いたんですけど、そもそも配列って何ですか?」
先生
「配列は、同じ種類のデータをひとまとめにして箱に入れる仕組みです。例えば、1人の人が持っている複数の電話番号を、ひとつの欄にまとめて保存するようなイメージですね。」
生徒
「表なのに、1つのマスにたくさん入れてもいいんですか?」
先生
「PostgreSQLでは大丈夫です。そのための仕組みが配列型(ARRAY)です。紙の名簿に付箋を重ねて貼るような感覚で考えてみましょう。」
1. PostgreSQLの配列型(ARRAY)とは?
PostgreSQLの配列型(ARRAY)とは、ひとつのカラム(列)の中に、同じ種類の値を複数まとめて保存できるデータ型です。 通常のテーブルでは、1つのマスには1つの値しか入りません。しかし配列型を使うと、1つのマスの中に複数の値を順番に並べて保存できます。
たとえば「好きな食べ物」「持っている資格」「対応できる言語」など、数が人によって変わる情報を扱うときに便利です。 ノートに箇条書きを書く感覚で、データを保存できると考えると分かりやすいでしょう。
2. 配列型が役立つ場面をイメージしよう
配列型が役立つのは、「ひとつの項目に、複数の同じ種類の情報を持たせたいとき」です。 例えば、ユーザーが複数の趣味を持っている場合、趣味の数は人によって違います。
普通の表で表現しようとすると、列をたくさん増やしたり、別のテーブルを作ったりする必要があります。 配列型を使えば、「趣味」という1つの列の中に、「読書」「映画」「ゲーム」のようにまとめて保存できます。
これは、引き出しの中に小さな仕切り箱があり、その中に同じ種類の物を並べて入れているイメージです。
3. 配列型を使ったテーブル定義の基本
PostgreSQLでは、データ型の後ろに「[]」を付けることで配列型を表現します。 例えば、文字を保存するtext型の配列は「text[]」と書きます。
以下は、ユーザーが複数の趣味を持てるテーブルの例です。
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT,
hobbies TEXT[]
);
この定義では、「hobbies」列に、文字の配列を保存できます。 SERIALは自動で番号を振る仕組み、PRIMARY KEYは行を特定するための目印です。
4. 配列データをINSERTで保存してみよう
配列型のデータを保存するときは、波かっこ「{ }」を使って値を並べます。 カンマで区切ることで、順番に配列として登録されます。
■ SQL実行前のテーブルの状態
id | name | hobbies
---+------+---------
(データなし)
INSERT INTO users (name, hobbies)
VALUES
('山田太郎', '{"読書","映画","ゲーム"}'),
('佐藤花子', '{"料理","旅行"}'),
('鈴木一郎', '{"ランニング"}'),
('高橋美咲', '{"音楽","写真","カフェ巡り"}');
■ SQL実行後のテーブルの状態
id | name | hobbies
---+------------+----------------------------
1 | 山田太郎 | {読書,映画,ゲーム}
2 | 佐藤花子 | {料理,旅行}
3 | 鈴木一郎 | {ランニング}
4 | 高橋美咲 | {音楽,写真,カフェ巡り}
このように、1つの列に複数の値が並んで保存されていることが分かります。 見た目は少し不思議ですが、慣れるととても扱いやすい形です。
5. 配列の中身をSELECTで取り出す
配列型のデータも、普通のSELECT文で確認できます。 まずは全体をそのまま表示してみましょう。
SELECT id, name, hobbies
FROM users;
配列は「{ }」付きで表示され、順番も保存した通りになります。 これは、番号付きのリストをそのまま表示しているような状態です。
配列の中の何番目かだけを取り出したい場合もあります。 PostgreSQLでは、配列の番号は1から始まります。
SELECT name, hobbies[1]
FROM users;
このSQLでは、各ユーザーの「最初の趣味」だけを表示します。 紙のメモの1行目だけを見る感覚で考えると分かりやすいでしょう。
6. 配列に特定の値が含まれているか調べる
配列型の便利な点は、「この値が含まれているか?」を簡単に調べられることです。 例えば、「映画」という趣味を持っている人を探したい場合を考えてみましょう。
SELECT name
FROM users
WHERE '映画' = ANY(hobbies);
ANYは、「配列の中のどれか1つでも一致したらOK」という意味です。 たくさん並んだカードの中から、同じ絵柄があるか探すイメージです。
このように、配列を使うと検索条件も自然な形で書けます。
7. 配列型を使うときの注意点
配列型はとても便利ですが、何でも配列にすれば良いわけではありません。 データの数が多くなったり、細かい検索や並び替えが必要な場合は、別のテーブルに分けた方が良いこともあります。
初心者のうちは、「数がそれほど多くなく、まとめて扱いたい情報」に配列型を使うと考えると失敗しにくいです。 ノートに付箋を貼りすぎると見づらくなるのと同じだと覚えておきましょう。
8. PostgreSQL配列型を理解すると広がる表現力
PostgreSQLの配列型(ARRAY)を理解すると、テーブル設計の幅が一気に広がります。 これまで「列を増やすしかない」と思っていた場面でも、すっきりした形でデータを保存できます。
配列型は、PostgreSQLならではの強力な機能のひとつです。 表の中に小さなリストを持てる仕組みとして、基本から少しずつ慣れていくと、データベース操作が楽しく感じられるようになります。