よく使うPostgreSQLのデータ型をまとめた

主なデータ型だけ記述してます。使う予定のない幾何データ型やバイナリ型などは省略した自分用メモです。

1. 数値型

 型   最小値   最大値   サイズ 
SMALLINT -32768 32767 2Byte
INTEGER -2147483648 2147483647 4Byte
BIGINT -9223372036854775808 9223372036854775807 8Byte
NUMERIC(精度[,位取り])
DECIMAL(精度[,位取り])

例)「1234.56」→「精度6、位取り2」
位取り省略時は0
REAL -1E+37 1E+37 4Byte
DOUBLE 精度 -1E+308 1E+308 8Byte
SMALLSERIAL *1 1 32767 2Byte
SERIAL *1 1 2147483647 4Byte
BIGSERIAL *1 1 9223372036854775807 8Byte

*1 自動的に増分値を設定する。(正確にはデータ型ではなく列に一意値を設定する簡便な表記法)

/*
 * SERIALは内部的に下記の様なテーブル定義になっている。
 */

-- これが
CREATE TABLE hoge_tbl (
    fuga_col SERIAL
);

-- こうなる
CREATE SEQUENCE hoge_tbl_fuga_col_seq;
CREATE TABLE hoge_tbl (
    fuga_col integer NOT NULL DEFAULT nextval('hoge_tbl_fuga_col_seq')
);
ALTER SEQUENCE hoge_tbl_fuga_col_seq OWNED BY hoge_tbl.fuga_col;

/* UNIQUE/PRIMARY KEY制約は設定されていないので重複値が登録される可能性がある!!
   (Ver7.3以前ではUNIQUEだったのでVerUp時は注意する事) */

2. 文字列型

 型   説明 
CHAR(n)
CHARACTER(n)
固定長文字列。
格納文字列が指定サイズより小さい場合は右スペース埋めされる。
CHAR CHAR(1)と等価
TEXT 可変長文字列。
ほぼ制限無く文字列を格納できる。(最大1GB)
VARCHAR(n) 可変長文字列。
TEXT型 + 文字列長チェックと同じ。

3. 日付/時刻型

 型   属性   説明   サイズ 
DATE 日付 範囲:
 BC4713 ~ AD32767
入力形式:
 ‘YYYY-MM-DD’,
 ‘YYYY/MM/DD’,
 ‘YYYYMMDD’
4Byte
TIMESTAMP[(p)] *1
  [without time zone]
日時 範囲:
 BC4713 ~ AD294276
入力形式:
 ‘YYYY-MM-DD HH:MM:SS’,
 ‘YYYY/MM/DD HH:MM:SS’,
 ‘YYYYMMDD HH:MM:SS’
8Byte
TIMESTAMP[(p)] *1
  with time zone
日時 タイムゾーン付き日時 8Byte
TIME[(p)] *1
  [without time zone]
時刻 範囲:
 ‘00:00:00.00’ ~ ‘23:59:59.99’
入力形式:
 ‘HH:MM:SS’,
 ‘HHMMSS’,
 ‘HH:MM’
8Byte
TIME[(p)] *1
  with time zone
時刻 タイムゾーン付き時刻 12Byte
interval[(p)] *1
  with time zone
日時の差 範囲:
 -178000000年 ~ 178000000
入力形式:
 - マニュアル参照 -
16Byte

*1 (p)は秒の小数点以下の桁数

4. ブーリアン型

 型   説明 
BOOLEAN 真理値
 TRUE / FALSE / NULL
 ’t’ / ‘f’, ’true’ / ‘false’
 ‘y’ / ’n’, ‘yes’ / ’no’
 ‘1’ / ‘0’, 1 / 0

5. ビット型

 型   説明 
BIT(n) n bitの固定長bit列
BIT BIT(1)と等価
VAR BIT(n) 最大n bitの可変長bit列

6. 参考

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