【PostgreSQL】データ型一覧【create文サンプルあり】

+IT 清水です。

+ITのSQLコース、Access・データベースコースでは、DBの操作に慣れてもらうために、現場で使われることの多い、PostgreSQLを使用した演習を組んでおります。

データベースにおいて、型は非常に重要なので、PostgreSQLの型一覧について、用途例と実際のCreate文の作成例とともに、データ型を見やすさ重視でまとめました。

Create文サンプル(よく使うデータ型)

※すべてのデータ型はこちら

※項目は本来はテーブルの用途に合わせてソートすべきですが、今回はデータ型一覧の順に沿って並べています。

create table sample_tbl(
    choice_no smallint,
    quantity int,
    number bigint,
    price numeric(10,3), -- 1234567.890 の表示形式で表示されます。
    u_id serial,
    product_name varchar(10),
    product_id char(5),
    remarks text,
    create_date timestamp(3), 
    open_date date,
    open_time time(3),
    delete_flg boolean
);

データ型一覧

よく使用するデータ型には用途例も記載しています。

数値型

型名定義法最大長説明範囲用途例
smallint smallint2Byte 整数 -32,768 ~ 32,767 選択肢
integer int 4Byte 整数 -2,147,483,648 (約-21億) ~ 2,147,483,647 (約21億) 個数、人数、日数、金額(整数の通貨)etc
bigint bigint 8Byte 整数 -9,223,372,036,854,775,808 (約-922京)
~ 9,223,372,036,854,775,807 (約922京)
numeric
(decimal)
numeric(p,s) 可変長 固定小数点小数点より上は131,072桁まで
小数点より下は 16,383桁まで
p : 全体の有効桁数 s : 小数部の桁数
例 : numeric(3,2) → 1.23
※decimalを定義することもできるが、テーブル作成時にはnumericに変換される。
金額、重さ、長さ、温度 etc
real real 4Byte 単精度浮動小数点 6桁精度
double precision double precision 8Byte 倍精度浮動小数点 15桁精度
smallserial smallserial 2Byte 自動増分整数 1 ~ 32,767
serial serial 4Byte 自動増分整数 1 ~ 2,147,483,647 (約21億) ID(連番)
bigserial bigserial 8Byte 自動増分整数 1 ~ 9,223,372,036,854,775,807 (約922京)

文字型

型名定義法最大長説明 用途例
character varying(n)
varchar(n)
varchar(n) 1GByte 可変長の文字列(最大 n 桁)商品名、名前、住所 etc
character(n)
char(n)
char(n) 1GB yte 固定長の文字列(固定 n 桁、不足分は半角スペースで埋められる)
※abcと入力した場合、abc__と表示される。(_は半角スペース)
商品ID、企業コード etc
texttext1GByte可変長の文字列(桁数の指定なし)備考、フリー回答欄 etc

日付型

型名定義法最大長説明有効範囲用途例
timestamp[(p)]timestamp
timestamp(p)
8Byteタイムゾーンなしの日付+時刻を格納( 1999-01-23 04:05:06)

p:小数点以下の秒数の桁数(0~6桁)
例:timestamp(3) → 1999-01-23 04:05:06.789
4713-01-01 00:00:00 BC ~ 294276-12-31 23:59:59 登録日時、更新日時
timestamp[(p)] with time zone timestamp with time zone

timestamp(p) with time zone
8Byte タイムゾーンありの日付+時刻を格納( 1999-01-23 04:05:06+02)

p:小数点以下の秒数の桁数(0~6桁)
例:timestamp(3) → 1999-01-23 04:05:06.789+02
4713-01-01 00:00:00 BC ~ 294276-12-31 23:59:59
date date 4Byte 日付のみを格納 4713-01-01 BC ~ 294276-12-31 期日、開催日 etc
time[(p)] time
time(p)
8Byte タイムゾーンなしの時刻を格納 00:00:00 ~ 24:00:00 開催時間 etc
time[(p)] with time zone time
time(p) with time zone
12 Byte タイムゾーンありの時刻を格納 00:00:00+1559 ~ 24:00:00-1559
interval [fields] [(p)] interval YEAR
interval MONTH
interval DAY
interval HOUR
interval MINUTE
interval SECOND
interval SECOND (p)
interval YEAR TO MONTH
interval DAY TO HOUR
interval DAY TO MINUTE
interval DAY TO SECOND
interval HOUR TO MINUTE
interval HOUR TO SECOND
interval MINUTE TO SECOND
時間間隔を格納
fields :いづれかのオプションを設定(必須)
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR TO MINUTE
HOUR TO SECOND
MINUTE TO SECOND

p:小数点以下の秒数の桁数(0~6桁)
-178,000,000年 ~ 178,000,000年

論理値データ型

型名定義法最大長説明 用途例
boolean boolean 1Byte 真( true )もしくは偽(false)のいづれかのみの状態を格納削除フラグ etc

他の型として

  • 通貨型(money)
  • バイナリ列データ型(bytea)
  • 列挙型(enum)
  • 幾何データ型(point, line, lseg, box, path, polygon, circle)
  • ネットワークアドレス型(cidr, inet, macaddr, macaddr8)
  • ビット列データ型(bit(n), bit varying (n) )
  • テキスト検索に関する型(tsvector, tsquery)
  • XML型(xml)
  • JSON型(json, jsonb, jsonpath)
  • 配列型(integer[][], text[][] etc)

等があります。

Create文サンプル(上記のすべてのデータ型)

create table sample_tbl(
    id1 smallint,
    quantity int,
    number bigint,
    price numeric(10,3),
    test real,
    test1 double precision,
    test2 smallserial,
    u_id serial,
    test3 bigserial,
    name varchar(10),
    product_id char(5),
    remarks text,
    create_date timestamp(3), 
    test4 timestamp with time zone,
    open_date date,
    open_time time(3),
    test5 time with time zone,
    test6 interval YEAR,
    delete_flg boolean
);

より詳しい説明については、PostgreSQL日本語ドキュメントに記載がありますので、より詳しく知りたい方はそちらをご覧ください。
https://www.postgresql.jp/document/

https://www.postgresql.jp/document/13/html/datatype.html