第 8章データ型

目次
8.1. 数値データ型
8.1.1. 整数データ型
8.1.2. 任意の精度を持つ数
8.1.3. 浮動小数点データ型
8.1.4. 連番型
8.2. 通貨型
8.3. 文字型
8.4. バイナリ列データ型
8.5. 日付/時刻データ型
8.5.1. 日付/時刻の入力
8.5.2. 日付/時刻出力
8.5.3. 時間帯
8.5.4. 内部
8.6. 論理値データ型
8.7. 幾何データ型
8.7.1. 座標点
8.7.2. 線分
8.7.3. 矩形
8.7.4. 経路
8.7.5. 多角形
8.7.6.
8.8. ネットワークアドレス型
8.8.1. inet
8.8.2. cidr
8.8.3. inetcidrデータ型の違い
8.8.4. macaddr
8.9. ビット列データ型
8.10. 配列
8.10.1. 配列型の宣言
8.10.2. 配列の値の入力
8.10.3. 配列へのアクセス
8.10.4. 配列の変更
8.10.5. 配列内の検索
8.10.6. 配列の入出力構文
8.11. 複合型
8.11.1. 複合型の宣言
8.11.2. 複合型の値の入力
8.11.3. 複合型へのアクセス
8.11.4. 複合型の変更
8.11.5. 複合型の入出力構文
8.12. オブジェクト識別子データ型
8.13. 疑似データ型
8.14. XML文書サポート

PostgreSQLにはユーザが使用可能な豊富なデータ型が始めから備わっています。 CREATE TYPEコマンドでPostgreSQLに対し新しいデータ型を追加できます。

表8-1に組み込みの汎用データ型を全て示します。 "別名"欄に列挙された代替名称のほとんどは、歴史的な理由によりPostgreSQLの内部で使用されている名前です。 他にも、ここに記載していない、内部で使用されるデータ型、削除予定のデータ型もあります。

表 8-1. データ型

名称別名説明
bigintint88バイト符号付き整数
bigserialserial8自動増分8バイト整数
bit [ (n) ] 固定長ビット列
bit varying [ (n) ]varbit可変長ビット列
booleanbool論理(ブール)値(真/偽)
box 平面上の矩形
bytea バイナリデータ("バイトの配列(byte array)"
character varying [ (n) ]varchar [ (n) ]可変長文字列
character [ (n) ]char [ (n) ]固定長文字列
cidr IPv4もしくはIPv6ネットワークアドレス
circle 平面上の円
date 暦の日付(年月日)
double precisionfloat8倍精度浮動小数点
inet IPv4もしくはIPv6ホストアドレス
integerint, int44バイト符号付き整数
interval [ (p) ] 時間間隔
line 平面上の無限直線
lseg 平面上の線分
macaddr MACアドレス
money 貨幣金額
numeric [ (p, s) ]decimal [ (p, s) ]精度の選択可能な高精度数値
path 平面上の幾何学的経路
point 平面上の幾何学的点
polygon 平面上の閉じた幾何学的経路
realfloat4単精度浮動小数点
smallintint22バイト符号付き整数
serialserial4自動増分4バイト整数
text 可変長文字列
time [ (p) ] [ without time zone ] 時刻
time [ (p) ] with time zonetimetz時間帯付き時刻
timestamp [ (p) ] [ without time zone ] 日付と時刻
timestamp [ (p) ] with time zonetimestamptz時間帯付き日付と時刻

互換性: 次に挙げるデータ型(あるいはその綴り方)はSQLで規定されています。 bitbit varyingbooleancharcharacter varyingcharactervarchardatedouble precisionintegerintervalnumericdecimalrealsmallinttime(時間帯付き、なしの両方)、 timestamp(時間帯付き、なしの両方)。

それぞれのデータ型はそのデータ型の入出力関数で決定される外部表現を保有しています。 組み込みデータ型の多くには、はっきりとした外部書式があります。 とは言っても、経路のようなPostgreSQLに特有な型や、あるいは、日付や時刻データ型のように書式を複数選択できる型が多くあります。 一部の入出力関数は転置することができません。 つまり、出力関数による結果は最初の入力と比較した場合精度を失う可能性があります。