Chapter 3. データ型

Table of Contents
3.1. 数値データ型
3.2. 通貨データ型
3.3. 文字データ型
3.4. 日付データ型
3.5. ブーリアン型
3.6. 幾何データ型
3.7. ネットワークアドレスデータ型
3.8. ビット列型

Postgres にはユーザのために多くのデータ型を 用意しています。また、CREATE TYPEコマンドを使用する ことにより、Postgresに新しい型を追加する ことも可能です。

Table 3-1では、ユーザが使用可能な一般的なすべての データ型が書かれています。"Aliases"カラムに書かれた名前は Postgres内部で使用されている名前で、それらには 歴史的根拠があります。また、内部的に使用されている、または削除予定の型も 使用可能ですが、このドキュメントには明記されていません。多くの既存型のは 出力形式があります。しかし、オープンパスやクローズパスなどの いくつかの型はPostgres特有のものであったり、 日付データ型やtime型のようにいくつかの形式を持つものもあります。

Table 3-1. データ型

データ型名別名説明
bigintint88バイト符号付整数
bit 固定長ビット列
bit varying(n)varbit(n)可変長ビット列
booleanbool真偽
box 矩形 '(左下の座標、右上の座標)'
character(n)char(n)固定長文字列
character varying(n)varchar(n)可変長文字列
cidr IP ネットワークアドレス
circle 円 '(中心点の座標、半径)'
date 日付 (年月日)
double precisionfloat88バイト浮動小数点
inet IP ホストアドレス
integerint, int44バイト符号付整数
interval 日付/時刻の差
line 直線 '(線上の1点、線上のもう1点)'
lseg 線分 '(始点の座標、終点の座標)'
macaddr MAC アドレス
money 米国通貨
numeric(p, s)decimal(p, s)精度の高い整数と小数
oid オブジェクト識別子
path 経路 '(点1、点2、...)'
point 点 '(x,y)'
polygon 多角形 '(点1...)'
realfloat44バイト浮動小数点
smallintint22バイト符号付整数
serial 4バイト自動増加整数
text 可変長テキスト (無制限)
time [ without time zone ] 時刻 (時分秒) タイムゾーンなし
time with time zone 時刻 (時分秒) タイムゾーン付き
timestamp [ with time zone ] 日付と時刻

適合性: 下記の型はSQLで明記されているものです。 bit, bit varying, boolean, char, character, character varying, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time, timestamp (タイムゾーン付き、なし両方)。

整数や浮動小数点などの基本の型に対応している 多くの出入力関数はエラーチェックを行います。足し算やかけ算などのいくつかの演算子と 関数に関しては、実行速度を早めるために実行される度にエラーチェックは行いません。 したがって、システム/データ型によっては、気がつかないうちにNumeric演算子の アンダーフローやオーバーフローを起こすかも知れません。

入出力関数には交換可能でないものがあります。つまり、 出力関数の結果を入力された最初の入力と比較した場合、 精度が下がる可能性があります。

3.1. 数値データ型

数値データ型は2/4/8バイトの整数、4/8バイトの浮動小数点、精度の高い整数と小数 で構成されています。

Table 3-2. Numericデータ型

型名データベース上のバイト数説明値の範囲
smallint2バイト固定精度-32768 から +32767
integer4バイト通常の固定精度-2147483648 から +2147483647
bigint8バイト固定精度約18桁
decimal可変長ユーザ指定の精度無制限
numeric可変長ユーザ指定の精度無制限
real4バイト可変精度6桁
double precision8バイト可変精度15桁
serial4バイト識別子またはクロスレファレンス0 から +2147483647

Numericデータ型の定数の構文はSection 1.1.2で説明されています。 Numericデータ型には多くの数値型で使える演算子と関数があります。詳細は Chapter 4を参照して下さい。

bigintはコンパイラが8バイトの数をサポートしている必要が あるので、すべてのプラットフォームで使用できるとは限りません。

3.1.1. シリアル型

serial型はPostgresによって 作成される特別な型です。テーブル内容に重複しない番号を作成する場合に よく使用されます。現在の実装では、下記のコマンドは

CREATE TABLE tablename (colname SERIAL);
     
はこのコマンドと同等の意味です。
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
    (colname integer DEFAULT nextval('tablename_colname_seq'));
CREATE UNIQUE INDEX tablename_colname_key on tablename (colname);
     

Caution

作成されたシーケンス型のためのシーケンスはテーブルが削除されたときに 自動的には削除されません

シーケンス型のためのシーケンスはシーケンス型を持っているテーブルが 削除されたときに自動的に削除されません。したがって、下記のコマンドが 実行された時にはエラーになってしまう可能性があります。
CREATE TABLE tablename (colname SERIAL);
DROP TABLE tablename;
CREATE TABLE tablename (colname SERIAL);
     
DROP SEQUENCEコマンドを実行されるまでシーケンスの実体は データベースに存在し続けます。