+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 | smallint | 2Byte | 整数 | -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 |
text | text | 1GByte | 可変長の文字列(桁数の指定なし) | 備考、フリー回答欄 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