PostgreSQLのデータ型を完全解説!初心者でも失敗しないデータベース入門
生徒
「PostgreSQL(ポストグレスキューエル)を勉強し始めたのですが、データ型ってなんですか?種類がたくさんあって難しそうです…。」
先生
「データ型というのは、箱に入れる中身の種類のことです。例えば、お弁当箱に飲み物を入れる人はいないですよね?同じように、名前を入れる箱、数字を入れる箱という風に、あらかじめ役割を決めておくんです。」
生徒
「なるほど!役割を決めないと、データベースが混乱してしまうんですね。パソコンに詳しくなくても覚えられますか?」
先生
「もちろんです。普段私たちが書く文字や数字、日付をどう整理するのかをイメージすれば簡単ですよ。基本をしっかり学んでいきましょう!」
1. データベースの「データ型」とは何のこと?
データベース、特にPostgreSQL(ポストグレスキューエル)というシステムを使う上で、最も大切な概念の一つが「データ型」です。 データ型とは、簡単に言うと「情報の種類」のことです。
例えば、スーパーのレジを想像してみてください。 レジでは「商品の名前(文字)」と「商品の値段(数字)」を扱いますよね。 データベースもこれと同じで、あらかじめ「ここには文字を入れますよ」「ここには計算できる数字を入れますよ」と宣言しておく必要があります。
なぜそんな面倒なことをするのでしょうか?それは、データの正確さを守るためです。 もし年齢を入力する場所に「あいうえお」という文字が入ってしまったら、後で平均年齢を計算することができなくなってしまいます。 データ型を正しく決めることで、このような間違いを未然に防ぐことができるのです。
2. 文字を保存する「文字列型」を学ぼう
まずは、名前や住所、メールアドレスなどを保存するときに使う「文字列型」です。 PostgreSQLでは、主に以下の3つの型がよく使われます。
- VARCHAR(n):最大n文字まで入る、長さが変わる文字の箱。
- CHAR(n):必ずn文字分確保される、固定された長さの箱。
- TEXT:文字数の制限がない、大きな箱。
一番よく使われるのは「VARCHAR(バーキャラ)」です。
例えば VARCHAR(100) と設定すれば、100文字までの名前を自由に保存できます。
では、実際に会員名簿をイメージしたテーブル(表)を作ってみましょう。
以下の例では、名前に VARCHAR、メールアドレスに TEXT を使っています。
id | name | age | email
---+-----------+-----+-------------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 田中愛子 | 22 | aiko@example.com
5 | 伊藤健太 | 35 | kenta@example.com
ここから、名前を更新するSQLを実行してみます。
UPDATE users
SET name = '山田たろう'
WHERE id = 1;
実行後のデータは以下のようになります。
id | name | age | email
---+-------------+-----+-------------------------
1 | 山田たろう | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 田中愛子 | 22 | aiko@example.com
5 | 伊藤健太 | 35 | kenta@example.com
3. 数値を扱う「数値型」の種類
次に、年齢や金額、商品の個数などを扱う「数値型」です。 数値型には「整数」と「小数」の大きく分けて二つのグループがあります。
- INTEGER(インテジャー):一般的な整数(-21億〜21億くらいまで)。年齢や個数に最適。
- BIGINT(ビッグイント):非常に大きな整数。世界中の人口や大きなお金を扱うときに使います。
- NUMERIC(ヌメリック):正確な小数を扱う型。消費税の計算などに使われます。
PostgreSQLの面白い特徴として、「連番(自動で増える数字)」を簡単に作れる SERIAL という型もあります。
これを使うと、データを追加するたびに ID が 1, 2, 3... と自動で振られるので、管理がとても楽になります。
以下のテーブルでは、商品の在庫管理をしています。
INTEGER を使って個数を管理してみましょう。
id | product_name | price | stock
---+--------------+-------+-------
1 | りんご | 150 | 50
2 | みかん | 100 | 100
3 | バナナ | 200 | 30
4 | メロン | 1500 | 5
5 | ブドウ | 800 | 15
在庫が減ったので、引き算をするSQLを実行します。
UPDATE products
SET stock = stock - 10
WHERE product_name = 'りんご';
実行後のデータはこちらです。
id | product_name | price | stock
---+--------------+-------+-------
1 | りんご | 150 | 40
2 | みかん | 100 | 100
3 | バナナ | 200 | 30
4 | メロン | 1500 | 5
5 | ブドウ | 800 | 15
4. 日付と時間を記録する「日付・時刻型」
ブログの投稿日や、予約システムの時間などを管理するには「日付・時刻型」を使います。
- DATE(デイト):日付のみ(2025-01-01 など)。
- TIME(タイム):時刻のみ(14:30:00 など)。
- TIMESTAMP(タイムスタンプ):日付と時刻の両方。
特に TIMESTAMP は、いつデータが登録されたかを記録する「作成日時」カラムによく使われます。
PostgreSQLは日付の計算も得意で、「今日から1週間後のデータだけを表示する」といった命令も簡単に出せます。
5. はい・いいえを管理する「論理値型」
「会員登録を完了しているか?」「メールマガジンを受け取るか?」といった、二択の情報を管理するのが BOOLEAN(ブーリアン) 型です。
- TRUE(トゥルー):はい、正しい、有効。
- FALSE(フォルス):いいえ、間違い、無効。
この型を使うことで、データが非常にシンプルに整理されます。 「0か1か」というデジタルな判断をそのままデータベースに保存できる便利な型です。
id | username | is_active | last_login
---+----------+-----------+--------------------
1 | userA | TRUE | 2025-10-01 10:00:00
2 | userB | FALSE | 2025-09-15 12:30:00
3 | userC | TRUE | 2025-10-05 08:45:00
4 | userD | TRUE | 2025-10-06 15:20:00
活動を停止しているユーザーを表示してみましょう。
SELECT username, last_login
FROM accounts
WHERE is_active = FALSE;
実行結果(出力結果)は以下の通りです。
username | last_login
---------+--------------------
userB | 2025-09-15 12:30:00
6. PostgreSQL特有の便利なデータ型
PostgreSQLが他のデータベースよりも強力だと言われる理由の一つに、非常に豊富な「特殊型」があります。 初心者の方は「こんなのもあるんだ!」と知っておくだけで大丈夫です。
- JSON / JSONB:複雑なデータ構造をそのまま保存できる形式。スマートフォンのアプリなどでよく使われます。
- ARRAY(配列):一つの箱の中に、複数の値(例えば、好きな食べ物リストなど)を詰め込めます。
- UUID:世界中で重複しないことが保証された、特別な長いID。
これらの特殊な型があるおかげで、PostgreSQLは初心者からプロフェッショナルまで、幅広い開発者に愛用されています。
7. 適切なデータ型を選ぶコツ
データ型を選ぶときは、以下の3つのポイントを意識しましょう。
- 「何」を保存するか決める:文字ならVARCHAR、数字ならINTEGER。
- 「大きさ」を考える:短文か、長文か。小さな数字か、大きな数字か。
- 「計算」をするか考える:数字として足し算をしたいなら、必ず数値型を選びます。
もし迷ったら、名前には VARCHAR(255)、数字には INTEGER、日付には TIMESTAMP を使っておけば、多くの場面で問題ありません。
後から型を変更することもできますが、最初から丁寧に決めておくことで、スムーズなシステム作りができますよ。
データベースは、最初は難しく感じるかもしれませんが、要は「整理整頓」の道具です。 データ型は、その整理を助けてくれる「ラベル」のようなものだと考えて、少しずつ慣れていきましょう。