PostgreSQL データ型:数値、文字、バイト

⚡ スマートサマリー

PostgreSQL データ型は、各列が格納できる値の種類を定義するもので、文字、数値、バイナリ、日付と時刻、ブール値、幾何値、ネットワーク、UUID、XML、JSONといったカテゴリが含まれます。 PostgreSQL また、CREATE TYPEコマンドを使用してカスタム型を作成することもできます。

  • 🔤 文字の種類: CHAR、VARCHAR、およびTEXTは、それぞれ固定長、可変長、および無制限長のテキスト値を格納します。
  • 🔢 数値型: 整数型と浮動小数点型は、smallintからbigintまでの範囲に加え、正確な数値と小数値も扱います。
  • 🕒 日時: タイムスタンプ、日付、時刻、および間隔の各タイプは、マイクロ秒単位の精度を提供し、オプションでタイムゾーンも設定できます。
  • ブール値と列挙型: ブール型は真、偽、またはnullの値をとり、列挙型はめったに変化しない固定の集合をモデル化する。
  • 🌐 特殊タイプ: ネットワーク、ジオメトリ、UUID、XML、JSON、およびJSONBは、アドレス、形状、識別子、および構造化データを扱います。
  • 💡 ベストプラクティス: 文字列にはTEXT型、数値にはNUMERIC型を優先し、カスタム型は必要な場合にのみ作成してください。

PostgreSQL ユーザーに豊富なネイティブ データ型を提供します。ユーザーは CREATE TYPE コマンドを使用して新しい型を追加できます。また、クエリがよりシンプルで読みやすくなります。

データ型 PostgreSQL

PostgreSQL 次のデータ型をサポートします:

  • テキストの種類
  • 数値型
  • 日付と時刻
  • XML
  • JSONの
  • ブーリアン
  • ビット
  • バイナリデータ
  • ネットワーク
  • 配列
  • データ型を作成する
  • 一時的な
  • UUID
  • ネットワーク アドレスと幾何学的データを保存するための特別なデータ タイプ。

勉強しましょう PostgreSQL データ型の詳細

文字データ型

PostgreSQL テキスト値を格納するための文字データ型をサポートします。 PostgreSQL 同じ内部構造から文字データ型を構築します。 PostgreSQL では、CHAR(n)、VARCHAR(n)、TEXT の 3 つの文字データ型が提供されます。

名前 詳細説明
varchar(n) 制限付きの可変長を宣言できます
文字(n) 固定長、空白埋め込み
テキスト このデータ型を使用して、長さ無制限の変数を宣言できます

数値データ型

PostgreSQL 2 つの異なるタイプの数値をサポートします。

  • 整数
  • 浮動小数点数
名前 店舗規模 レンジ
小さい整数 2バイト + 32768ツー32767
整数 4バイト + 2147483648ツー2147483647
bigint 8バイト -9223372036854775808~9223372036854775807
10進数 変数 131072 進数として宣言した場合、データ型の範囲は小数点前 16383 桁から小数点後 XNUMX 桁になります。
数値の 変数 数値として宣言する場合は、小数点前131072桁から小数点以下16383桁までの数値を含めることができます。
リアル 4バイト 6 進数 XNUMX 桁の精度
8バイト 15 進数 XNUMX 桁の精度

バイナリデータ型

バイナリ文字列は、オクテットまたはバイトのシーケンスです。 バイナリ Postgres データ型は XNUMX つの方法に分類されます。

  • バイナリ文字列により、値ゼロのオッズを保存できます
  • 印刷不可能なオクテット

文字列ではゼロ オクテットは許可されず、データベースの文字セット エンコード規則に従って無効なその他のオクテット値やシーケンスも許可されません。

名前 ストレージサイズ 詳細説明
バイト 1 ~ 4 バイトにバイナリ文字列のサイズを加えたもの 可変長バイナリ文字列

ネットワークアドレスの種類

多くのアプリケーションは、ユーザーやセンサーの IP アドレスなどのネットワーク情報を保存します。 PostgreSQL には、ネットワーク データの最適化に役立つ XNUMX つのネイティブ タイプがあります。

名前 サイズ 詳細説明
サイダー 7または19バイト IPv4およびIPv6 ネットワーク
INET 7または19バイト IPv4およびIPv6ホストとネットワーク
マカドル 6バイト MACアドレス

ネットワークアドレスタイプを使用すると、次のような利点があります。

  1. ストレージスペースの節約
  2. 入力エラーチェック
  3. サブネットによるデータ検索などの機能

テキスト検索タイプ

PostgreSQL 全文検索をサポートするために設計された 2 つのデータ型を提供します。全文検索は、自然言語ドキュメントのコレクションを検索して、クエリに最も一致するものを検索します。

  • Tsvector テキスト検索 PostgreSQL 変数タイプは、テキスト検索に最適化された形式でドキュメントを表します。
  • クエリ型テキスト検索は、検索する必要のあるキーワードを保存します。

日付/時刻データ型

PostgreSQL timestamp は秒精度ではなくマイクロ秒精度を提供します。さらに、タイムゾーンありまたはなしで保存するオプションもあります。 PostgreSQL 入力時にタイムゾーン付きのタイムスタンプを UTC に変換して保存します。

日付と時刻の入力は、従来の Postgres、ISO 8601、SQL 互換など、さまざまな形式で受け入れられます。

PostgreSQL 日/月/年の順序をサポートします。サポートされている形式は DMY、MDY、YMD です

時間データ型

名前 サイズ レンジ 解像度
タイムゾーンのないタイムスタンプ 8バイト 紀元前 4713 年から西暦 294276 年まで 1マイクロ秒/14桁
タイムゾーン付きのタイムスタンプ 8バイト 紀元前 4713 年から西暦 294276 年まで 1マイクロ秒/14桁
date 4バイト 紀元前 4713 年から西暦 294276 年まで ある日
タイムゾーンのない時間 8バイト 00:00:00 to 24:00:00 1マイクロ秒/14桁
タイムゾーン付きの時間 12バイト 00:00:00 + 1459 ~ 24:00:00-1459 1マイクロ秒/14桁
インターバル 12バイト -178000000 ~ 178000000 年 1マイクロ秒/14桁

入力 詳細説明
2025-09-07 ISO 8601、任意の日付形式の 7 月 XNUMX 日 (推奨形式)
2025 年 9 月 7 日 7 月 XNUMX 日 (任意の日付スタイル)
9/7/2025 7 月 9 日は MDY、XNUMX 月 XNUMX 日は DMY
9/7/25 7 年 2025 月 XNUMX 日、MDY との
2025-Sep-7 7 月 XNUMX 日 (任意の日付スタイル)
7年2018月XNUMX日 7 月 XNUMX 日 (任意の日付スタイル)
7-Sep-25 7 年 2025 月 XNUMX 日、YMD と
20250907 ISO 8601、2025年9月7日、あらゆるモード
2025.250 年と日付、この場合は 7 年 2025 月 XNUMX 日
J25250 ユリウス日

時刻/タイムゾーン入力付き時刻

入力 詳細説明
11:19:38.507
11:19:38
11:19
111938
ISO 8601
11:19 11時19分と同じ
11:19 PM 23:19と同じ
23:19-3
23:19-03:00
231900-03
ISO 8601、東部標準時午後 11 時 19 分と同じ
23:19 EST タイムゾーンはESTとして指定されており、午後11時19分(EST)と同じです

ブール型

ブール データ型は次の値を保持できます。

  • ×
  • ヌル

値。

あなたは ブール or boolean キーワードを使用して、ブール データ型の列を宣言します。

ブール値列に値を挿入すると、Postgre は値を次のように変換します。

  • はい
  • y
  • 1
  • t
  • true

1に。

次のような価値観がある一方で、

  • いいえ
  • N
  • 0
  • F
  • ×

0に変換される

データの選択中に、値は再びyes、true、yなどに変換されます。

幾何学的データ型

ジオメトリ データ型は 2 次元の空間オブジェクトを表します。回転、拡大縮小、変換などの操作を実行するのに役立ちます。

名前 ストレージサイズ - 表現 詳細説明
ポイント 16バイト 平面上の点 (x、y)
LINE 32バイト 無限線 ((x1.yl).(x2.y2))
ルセグ 32バイト 有限の線分 ((x1.yl).(x2.y2))
Box 32バイト 長方形の Box ((x1.yl).(x2.y2))
パス 16n + 16n バイト パスを閉じて開く ((xl.yl),…)
Polygon 40 + 16n バイト Polygon [(xl.yl),….]
サークル 24バイト サークル <(xy).r> (中心点と半径)

列挙型

列挙 PostgreSQL データ型は、国コードや支店 ID など、めったに変更されない情報を表すのに役立ちます。列挙型データ型は、データの整合性を確保するために外部キーを使用してテーブルで表されます。

例:

髪の色は人口統計データベースではかなり静的です

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

列挙型

範囲タイプ

多くのビジネス アプリケーションでは、範囲内のデータが必要です。 通常、範囲を処理するために XNUMX つの列 (例: 開始日、終了日) が定義されます。 これは非効率的であり、維持するのも困難です。

Postgres は次のような範囲型を構築しました

  • int4range — 整数の表示範囲
  • int8range — bigint の表示範囲
  • numrange — 数値範囲を表示します
  • tstrange — タイムゾーンなしでタイムスタンプを表示するのに役立ちます
  • 奇妙な — タイムスタンプをタイムゾーンとともに表示できます
  • 日付範囲 — 日付の範囲

UUIDの種類

UUID(Universally Unique Identifier)は、アルゴリズムによって生成される128ビットの数値です。同じアルゴリズムを使用しても、世界中の他のユーザーが同じ識別子を生成する可能性は非常に低いと言えます。そのため、分散システムにおいては、単一のデータベース内で一意性を確保できるUUIDは理想的な識別子となります。UUIDは、小文字の16進数で表され、各桁はハイフンで区切られます。

PostgreSQL ネイティブのUUIDデータ型を備えており、16バイトのストレージを消費します。UUIDは主キーに最適なデータ型です。

例:

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre は、すべて大文字、ハイフン、中括弧なしなどの代替形式の UUID 入力も受け入れます。

XML型

PostgreSQL を使用すると、XML データをデータ型に格納できますが、これはテキスト データ型の拡張にすぎません。ただし、入力 XML が整形式であるかどうかをチェックできるという利点があります。

例:

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')

JSONタイプ

JSONデータを保存するには PostgreSQL 2 つのデータ型を提供します

  1. JSONの
  2. JSONB
JSON ジソンブ
JSON 検証を使用したテキスト データ型の単純な拡張 JSON データのバイナリ表現
挿入は高速ですが、データの取得は比較的遅くなります。 挿入は遅いが選択(データの取得は速い)
入力されたデータを空白も含めてそのまま保存します。 インデックス作成をサポートします。 空白を最適化して検索を高速化する可能性があります。
データ取得時の再処理 データ取得時に再処理は不要

JSON データ型を使用する特別な必要性がない限り、最も広く使用されている JSON データ型は jsonb を使用しました。

例:

CREATE TABLE employee (
  id integer NOT NULL,
  age  integer NOT NULL,
  data jsonb
);
INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboarded": true}');

疑似型

PostgreSQL には、疑似タイプと呼ばれる特殊な目的のエントリが多数あります。疑似型を次のように使用することはできません。 PostgreSQL 列のタイプ。関数の引数や戻り値の型を宣言するために使用されます。

使用可能なそれぞれの疑似型は、関数の動作に関するドキュメントが特定の値を単に取得したり返したりすることに対応していない状況で役立ちます。 SQLデータ型.

名前 詳細説明
任意 関数はすべての入力データ型を受け入れます。
配列 この関数は、任意の配列データ型を受け入れます。
任意の要素 この関数は任意のデータ型を受け入れます。
任意の列挙型 この関数は、任意の enum データ型を受け入れます。
非配列 この関数は、配列以外の任意のデータ型を受け入れます。
C文字列 関数は、NULL で終了する C 文字列を受け入れるか、返します。
インナー 内部関数はサーバー内部のデータ型を受け入れるか返します。
言語ハンドラ 言語ハンドラーを返すように宣言されています。
USBレコーディング 指定されていない行タイプを返す関数を見つけます。
トリガー トリガーを返すにはトリガー関数を使用します。

この関数を使用するユーザーは、疑似型が引数の型として使用されるときに関数が安全に動作することを確認する必要があることが重要です。

データ型を使用したベスト プラクティス

  • 入力を制限する場合を除き、「テキスト」データ型を使用してください。
  • 「char」は決して使用しないでください。
  • 整数には「int」を使用します。bigintは、非常に大きな数値の場合のみ使用してください。
  • ほぼ常に「数値」を使用します
  • フロートインを使用する PostgreSQL IEEE 754 データソースがある場合

よくあるご質問

数値型(10進数)は正確な値を格納し、金額や精密な計算に最適です。浮動小数点型(実数型と倍精度浮動小数点型)は近似値を格納し、処理速度は速いものの、丸め誤差が小さいため、正確な財務データには使用しないでください。

Yes. PostgreSQL 任意の列に、integer[] や text[] などの基本型の配列を格納できます。配列は値のリストに便利で、クエリで検索、インデックス付け、およびネスト解除できます。

通貨には数値型を使用してください。数値型は正確な小数値を格納できるためです。丸め誤差が生じる浮動小数点型は避けてください。専用の通貨型も存在しますが、複数通貨データには柔軟性に欠けます。

AIはサンプルデータを分析し、金額には数値型、柔軟なフィールドにはjsonb型など、適切なデータタイプを推奨します。ストレージ容量、精度、パフォーマンスにおけるトレードオフを説明することで、自信を持って意思決定できるようサポートします。

はい。AI は、以下のデータ型をマッピングできます。 MySQL, OracleまたはSQL Serverを PostgreSQL TINYINT や NVARCHAR などの同等物やフラグの不一致、ping よりスムーズなデータベース移行を計画する。