カテゴリ: データベース 更新日: 2026/01/27

PostgreSQL配列型(Array)入門ガイド!初心者でもわかるデータベースの便利な使い方

PostgreSQLの配列型(Array)とは?基本構造と使い方を解説
PostgreSQLの配列型(Array)とは?基本構造と使い方を解説

先生と生徒の会話形式で理解しよう

生徒

「先生、データベースの表の中に『複数のデータ』をひとまとめにして入れたいときはどうすればいいんですか?例えば、一人の人が持っている趣味を全部一つの項目に入れたいんです。」

先生

「それは面白い視点ですね。PostgreSQLには『配列型(Array)』という非常に便利な機能があります。これを使えば、一つの枠の中に複数の値を詰め込むことができるんですよ。」

生徒

「配列って、何だか難しそうな名前ですね。パソコンに詳しくなくても使いこなせますか?」

先生

「もちろんです。お弁当箱の仕切りの中に、おかずをいくつか入れるようなイメージだと思ってください。基本的な書き方さえ覚えれば、データの整理がぐっと楽になりますよ。」

1. PostgreSQLの配列型(Array)とは?

1. PostgreSQLの配列型(Array)とは?
1. PostgreSQLの配列型(Array)とは?

データベース(情報を整理して保管する仕組み)の世界では、通常「一つの枠には一つのデータ」を入れるのが基本のルールです。これを専門用語で「正規化」と呼んだりしますが、初心者の方は「一つのマス目には一つの言葉しか書かない」というルールだと思ってください。

しかし、世界的に人気の高いデータベース管理システムである「PostgreSQL(ポストグレスキューエル)」では、その基本ルールを一歩進めた便利な機能が使えます。それが「配列型(Array)」です。

配列型とは、一つの列(カラム)の中に、同じ種類のデータを複数まとめて保存できる形式のことです。例えば、「好きな食べ物」という項目に「リンゴ、バナナ、イチゴ」と複数を一度に入れることができます。

プログラミング未経験の方にとって、配列は「仕切りのある引き出し」のようなものです。一つの引き出しの中に、複数の靴下を並べて入れておくことができるように、データベースのひとつのセル(マス目)の中に、複数の値を並べて保管できるのです。

2. 配列型のメリットと使いどころ

2. 配列型のメリットと使いどころ
2. 配列型のメリットと使いどころ

なぜ、わざわざ配列型を使うのでしょうか?それは「データをシンプルに管理できる」場合があるからです。

例えば、スマートフォンの連絡先アプリを想像してみてください。一人の友人が複数の電話番号(自宅、携帯、仕事用)を持っている場合、それらをバラバラの場所に保存するよりも、「電話番号リスト」としてまとめて管理できたほうが、画面が見やすくなりますよね。

主なメリットは以下の通りです:

  • データの構造が直感的でわかりやすくなる
  • 関連するデータを一気に取り出すことができる
  • 複雑なテーブル結合(複数の表を合体させる操作)を減らせる場合がある

ただし、何でもかんでも配列にすれば良いわけではありません。データが膨大になる場合や、後から細かい検索を頻繁に行う場合は、従来の「一つのマスに一つのデータ」という形式の方が有利なこともあります。適材適所で使い分けるのが、データベースマスターへの第一歩です。

3. 配列型の基本的な定義とデータの追加

3. 配列型の基本的な定義とデータの追加
3. 配列型の基本的な定義とデータの追加

それでは、実際に配列型を使ったテーブルを作ってみましょう。今回は「部活動のメンバーリスト」を作成します。一人の生徒が複数の「得意なスポーツ」を登録できるようにしてみます。

SQLで配列を指定するときは、データの種類の後ろに「[](角括弧)」を付けます。例えば、文字を入れるなら text[] と書きます。


-- テーブル(表)を作成します
CREATE TABLE students (
    id serial PRIMARY KEY,
    name text,
    sports text[] -- ここが配列型!文字列の集まりを保存できます
);

-- データを追加します
INSERT INTO students (name, sports) VALUES
('田中太郎', ARRAY['野球', 'テニス']),
('佐藤花子', ARRAY['水泳', 'バレーボール', '卓球']),
('鈴木一郎', ARRAY['サッカー']),
('高橋美咲', ARRAY['バスケットボール', 'バドミントン']),
('伊藤健太', ARRAY['剣道', '柔道', '空手']),
('渡辺真衣', ARRAY['陸上', '駅伝']);

実行後のテーブルの中身は、以下のようになります。


id | name     | sports
---+----------+------------------------------------
1  | 田中太郎 | {野球,テニス}
2  | 佐藤花子 | {水泳,バレーボール,卓球}
3  | 鈴木一郎 | {サッカー}
4  | 高橋美咲 | {バスケットボール,バドミントン}
5  | 伊藤健太 | {剣道,柔道,空手}
6  | 渡辺真衣 | {陸上,駅伝}

データを入れるときは ARRAY['値1', '値2'] という書き方をします。これで、一つの項目に複数のスポーツが保存されました。中身を見ると「{}(波括弧)」で囲まれて表示されているのがわかりますね。これがPostgreSQLでの配列の表現方法です。

4. 配列の中から特定のデータを取り出す方法

4. 配列の中から特定のデータを取り出す方法
4. 配列の中から特定のデータを取り出す方法

保存した配列の中から、特定の要素だけを取り出したり、特定の条件で検索したりすることも可能です。

例えば、「一番得意なスポーツ(配列の1番目のデータ)」だけを表示したい場合は、インデックス(添字)を使います。PostgreSQLの配列は、1番目から数え始めるのが特徴です。


-- 1番目のスポーツだけを取り出す
SELECT name, sports[1] AS primary_sport
FROM students;

実行結果は以下のようになります。


name     | primary_sport
----------+---------------
田中太郎 | 野球
佐藤花子 | 水泳
鈴木一郎 | サッカー
高橋美咲 | バスケットボール
伊藤健太 | 剣道
渡辺真衣 | 陸上

このように、sports[1] と指定することで、複数のデータの中から最初の一つだけを抜き出すことができました。これは、名簿の中から「第一志望」だけを抽出するような操作と同じですね。

5. 配列を使ったデータの検索(ANY関数の活用)

5. 配列を使ったデータの検索(ANY関数の活用)
5. 配列を使ったデータの検索(ANY関数の活用)

次に、「特定のスポーツが含まれている人を全員探す」という操作をしてみましょう。配列の中身を一つずつチェックするのは大変そうに見えますが、SQLなら簡単です。

ANY という言葉を使うと、「配列の中のどれかに当てはまるなら」という条件を作ることができます。


-- 「バレーボール」が含まれている人を検索する
SELECT name, sports
FROM students
WHERE 'バレーボール' = ANY(sports);

実行前のテーブル状態(再掲):


id | name     | sports
---+----------+------------------------------------
1  | 田中太郎 | {野球,テニス}
2  | 佐藤花子 | {水泳,バレーボール,卓球}
3  | 鈴木一郎 | {サッカー}
4  | 高橋美咲 | {バスケットボール,バドミントン}
5  | 伊藤健太 | {剣道,柔道,空手}
6  | 渡辺真衣 | {陸上,駅伝}

実行後の結果:


name     | sports
----------+-------------------------
佐藤花子 | {水泳,バレーボール,卓球}

「佐藤花子さん」のスポーツリストの中に「バレーボール」が含まれていたので、正しく抽出されました。もし、名簿の中に「テニス」をしている人を検索すれば、田中太郎さんがヒットすることになります。

6. 配列データをバラバラにする(unnest関数)

6. 配列データをバラバラにする(unnest関数)
6. 配列データをバラバラにする(unnest関数)

最後に、配列として保存したデータを、普通の表のように「一行ずつ」に分解する方法を紹介します。これには unnest(アンネスト)という関数を使います。

「ネスト」とは入れ子構造のこと。それを「アン(打ち消し)」にするので、中身を外に放り出す、という意味になります。


-- 配列をバラバラの行に展開する
SELECT name, unnest(sports) AS sport_item
FROM students
WHERE id <= 2; -- わかりやすくするために最初の2人だけ表示

実行結果:


name     | sport_item
----------+------------
田中太郎 | 野球
田中太郎 | テニス
佐藤花子 | 水泳
佐藤花子 | バレーボール
佐藤花子 | 卓球

見てください!一人の名前に対して、スポーツが一つずつ対応するような形に広がりました。配列型でまとめて保存しておきながら、必要に応じてこのようにバラバラにして集計したり分析したりすることもできるのです。

このようにPostgreSQLの配列型は、柔軟にデータを扱うための強力な武器になります。プログラミングの経験がなくても、「複数の値を一つのセットとして扱う」という感覚さえ掴めれば、あなたのデータ管理の幅は大きく広がることでしょう。

カテゴリの一覧へ
新着記事
New1
Rails
Rails GoodJob入門!PostgreSQLベースのバックグラウンド処理を初心者向けに完全解説
New2
Ruby
Rubyで学ぶビット演算入門:&・|・^・~・<<・>>の基礎と実例
New3
Rails
RESTとRailsの関係を徹底解説!resources設計と7つの標準アクションを初心者向けにわかりやすく解説
New4
データベース
MySQLアーキテクチャ入門!初心者向けに基本構造と仕組みを徹底解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.7
Java&Spring記事人気No7
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説