Postgresql-data-types

提供:Dev Guides
移動先:案内検索

PostgreSQL-データ型

この章では、PostgreSQLで使用されるデータ型について説明します。 テーブルの作成中に、各列にデータ型、つまりテーブルフィールドに保存するデータの種類を指定します。

これはいくつかの利点を可能にします-

  • 一貫性-同じデータ型の列に対する操作は一貫した結果をもたらし、通常は最速です。
  • 検証-データ型の適切な使用は、データの形式検証とデータ型の範囲外のデータの拒否を意味します。
  • コンパクト-列は単一のタイプの値を格納できるため、コンパクトな方法で格納されます。
  • パフォーマンス-データ型を適切に使用すると、データを最も効率的に保存できます。 格納された値は迅速に処理できるため、パフォーマンスが向上します。

PostgreSQLは幅広いデータ型をサポートしています。 また、ユーザーは_CREATE TYPE_ SQLコマンドを使用して独自のカスタムデータ型を作成できます。 PostgreSQLには、データ型のさまざまなカテゴリがあります。 以下で説明します。

数値型

数値型は、2バイト、4バイト、および8バイトの整数、4バイトと8バイトの浮動小数点数、および選択可能な精度の小数で構成されます。 次の表に、使用可能なタイプを示します。

Name Storage Size Description Range
smallint 2 bytes small-range integer -32768 to +32767
integer 4 bytes typical choice for integer -2147483648 to +2147483647
bigint 8 bytes large-range integer -9223372036854775808 to 9223372036854775807
decimal variable user-specified precision,exact up to 131072 digits before the decimal point; up to 16383 digits after the decimal point
numeric variable user-specified precision,exact up to 131072 digits before the decimal point; up to 16383 digits after the decimal point
real 4 bytes variable-precision,inexact 6 decimal digits precision
double precision 8 bytes variable-precision,inexact 15 decimal digits precision
smallserial 2 bytes small autoincrementing integer 1 to 32767
serial 4 bytes autoincrementing integer 1 to 2147483647
bigserial 8 bytes large autoincrementing integer 1 to 9223372036854775807

通貨タイプ

_money_タイプは、固定小数精度で通貨額を格納します。 _numeric、int、およびbigint_データ型の値は、_money_にキャストできます。 丸めエラーが発生する可能性があるため、お金を扱うために浮動小数点数を使用することはお勧めしません。

Name Storage Size Description Range
money 8 bytes currency amount -92233720368547758.08 to +92233720368547758.07

キャラクタータイプ

以下の表は、PostgreSQLで使用可能な汎用文字タイプを示しています。

S. No. Name & Description
1

character varying(n), varchar(n)

制限付き可変長

2

character(n), char(n)

固定長、空白埋め

3

text

可変長

バイナリデータタイプ

_bytea_データ型を使用すると、以下の表のようにバイナリ文字列を保存できます。

Name Storage Size Description
bytea 1 or 4 bytes plus the actual binary string variable-length binary string

日付/時刻型

PostgreSQLは、以下の表に示すように、SQLの日付と時刻の完全なセットをサポートしています。 日付はグレゴリオ暦に従ってカウントされます。 ここでは、解像度が day である date タイプを除くすべてのタイプの解像度は* 1マイクロ秒/14桁*です。

Name Storage Size Description Low Value High Value
timestamp [(p)] [without time zone ] 8 bytes both date and time (no time zone) 4713 BC 294276 AD
TIMESTAMPTZ 8 bytes both date and time, with time zone 4713 BC 294276 AD
date 4 bytes date (no time of day) 4713 BC 5874897 AD
time [ (p)] [ without time zone ] 8 bytes time of day (no date) 00:00:00 24:00:00
time [ (p)] with time zone 12 bytes times of day only, with time zone 00:00:00+1459 24:00:00-1459
interval [fields ] [(p) ] 12 bytes time interval -178000000 years 178000000 years

ブール型

PostgreSQLは、標準SQL型のブール値を提供します。 ブールデータ型には、状態_true false_、およびSQL null値で表される3番目の状態_unknown_を含めることができます。

Name Storage Size Description
boolean 1 byte state of true or false

列挙型

列挙型(列挙型)は、静的な順序付けられた値のセットで構成されるデータ型です。 これらは、多くのプログラミング言語でサポートされている列挙型と同等です。

他の型とは異なり、列挙型はCREATE TYPEコマンドを使用して作成する必要があります。 このタイプは、静的な順序付けられた値のセットを格納するために使用されます。 たとえば、コンパスの方向、すなわち、北、南、東、西、または以下に示す曜日-

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

作成された列挙型は、他の型と同様に使用できます。

幾何学的タイプ

幾何データ型は、2次元の空間オブジェクトを表します。 最も基本的なタイプであるポイントは、他のすべてのタイプの基礎を形成します。

Name Storage Size Representation Description
point 16 bytes Point on a plane (x,y)
line 32 bytes Infinite line (not fully implemented) x1,y1),(x2,y2x1,y1),(x2,y2
lseg 32 bytes Finite line segment x1,y1),(x2,y2x1,y1),(x2,y2
box 32 bytes Rectangular box x1,y1),(x2,y2x1,y1),(x2,y2
path 16+16n bytes Closed path (similar to polygon) ((x1,y1),…​)
path 16+16n bytes Open path [(x1,y1),…​]
polygon 40+16n Polygon (similar to closed path) ((x1,y1),…​)
circle 24 bytes Circle <(x,y),r> (center point and radius)

ネットワークアドレスタイプ

PostgreSQLは、IPv4、IPv6、およびMACアドレスを保存するデータ型を提供します。 これらのタイプは入力エラーチェックと特殊な演算子と機能を提供するため、プレーンテキストタイプの代わりにこれらのタイプを使用してネットワークアドレスを保存する方が適切です。

Name Storage Size Description
cidr 7 or 19 bytes IPv4 and IPv6 networks
inet 7 or 19 bytes IPv4 and IPv6 hosts and networks
macaddr 6 bytes MAC addresses

ビット列タイプ

ビット文字列型は、ビットマスクを格納するために使用されます。 0または1のいずれかです。 SQLビットタイプには、* bit(n) bit changing(n)*の2種類があります。nは正の整数です。

テキスト検索タイプ

このタイプは全文検索をサポートします。これは、自然言語ドキュメントのコレクションを検索して、クエリに最も一致するドキュメントを見つけるアクティビティです。 これには2つのデータ型があります-

S. No. Name & Description
1

tsvector

これは、「語彙素」と呼ばれる同じ単語の異なる変形をマージするために正規化された個別の単語のソートされたリストです。

2

tsquery

これは、検索される語彙素を保存し、それらを結合してブール演算子&(AND)、

UUIDタイプ

UUID(Universally Unique Identifiers)は、ハイフンで区切られたいくつかのグループ、具体的には8桁のグループ、4桁の3つのグループ、12桁のグループが続く、一連の小文字の16進数として書き込まれます128ビットを表す合計32桁。

UUIDの例は-550e8400-e29b-41d4-a716-446655440000です

XMLタイプ

XMLデータ型は、XMLデータを格納するために使用できます。 XMLデータを保存するには、まず次のように関数xmlparseを使用してXML値を作成する必要があります-

XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<tutorial>
<title>PostgreSQL Tutorial </title>
   <topics>...</topics>
</tutorial>')

XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

JSONタイプ

_json_データ型を使用して、JSON(JavaScript Object Notation)データを保存できます。 このようなデータは_text_として保存することもできますが、_json_データ型には、保存されている各値が有効なJSON値であることを確認するという利点があります。 また、関連するサポート関数も利用できます。これらの関数は、次のようにJSONデータ型を直接処理するために使用できます。

Example Example Result
array_to_json('\{\{1,5},\{99,100}}'::int[]) [[row_to_json(row(1,'foo'))

配列タイプ

PostgreSQLでは、テーブルの列を可変長の多次元配列として定義できます。 組み込みまたはユーザー定義の基本型、列挙型、または複合型の配列を作成できます。

配列の宣言

配列型は次のように宣言できます

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer[],
   scheme text[][]
);

または、キーワード「ARRAY」を使用して

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer ARRAY[4],
   scheme text[][]
);

値を挿入する

配列値はリテラル定数として挿入でき、要素値を中括弧で囲み、コンマで区切ります。 以下に例を示します-

INSERT INTO monthly_savings
VALUES (‘Manisha’,
‘{20000, 14600, 23500, 13250}’,
‘{{“FD”, “MF”}, {“FD”, “Property”}}’);

配列へのアクセス

配列にアクセスする例を以下に示します。 以下のコマンドは、貯蓄が第4四半期よりも第2四半期に多い人を選択します。

SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];

配列の変更

配列を変更する例は次のとおりです。

UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Manisha';

またはARRAY式の構文を使用して-

UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Manisha';

配列の検索

配列の検索の例を次に示します。

SELECT *FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR
saving_per_quarter[2] = 10000 OR
saving_per_quarter[3] = 10000 OR
saving_per_quarter[4] = 10000;

配列のサイズがわかっている場合は、上記の検索方法を使用できます。 それ以外の場合、次の例は、サイズが不明な場合の検索方法を示しています。

SELECT* FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);

複合型

この型は、フィールド名とそのデータ型のリスト、つまり、行の構造またはテーブルのレコードを表します。

複合型の宣言

次の例は、複合型を宣言する方法を示しています

CREATE TYPE inventory_item AS (
   name text,
   supplier_id integer,
   price numeric
);

このデータ型は、次のように作成テーブルで使用できます-

CREATE TABLE on_hand (
   item inventory_item,
   count integer
);

複合値入力

複合値をリテラル定数として挿入し、フィールド値を括弧で囲み、それらをコンマで区切ることができます。 以下に例を示します-

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

これは、上記で定義した_inventory_item_に有効です。 式に複数のフィールドがある限り、ROWキーワードは実際にはオプションです。

複合型へのアクセス

複合列のフィールドにアクセスするには、テーブル名からフィールドを選択するのと同様に、ドットの後にフィールド名を使用します。 たとえば、on_handサンプルテーブルからいくつかのサブフィールドを選択するには、クエリは次のようになります-

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

次のように、テーブル名を使用することもできます(たとえば、マルチテーブルクエリで)。

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

範囲タイプ

範囲タイプは、データの範囲を使用するデータタイプを表します。 範囲タイプは、離散範囲(例:すべての整数値1から10)または連続範囲(例:午前10:00から午前11:00までの任意の時点)です。

利用可能な組み込みの範囲タイプには、次の範囲が含まれます-

  • int4range -整数の範囲
  • int8range -bigintの範囲
  • numrange -数値の範囲
  • tsrange -タイムゾーンのないタイムスタンプの範囲
  • tstzrange -タイムゾーン付きのタイムスタンプの範囲
  • daterange -日付の範囲

カスタム範囲タイプを作成して、inetタイプをベースとして使用するIPアドレス範囲、floatデータタイプをベースとして使用するfloat範囲など、新しいタイプの範囲を使用可能にすることができます。

範囲タイプは、それぞれ[]および()文字を使用した包括的および排他的範囲境界をサポートします。 たとえば、「[4,9)」は、4から9までのすべての整数を表します。

オブジェクト識別子のタイプ

オブジェクト識別子(OID)は、さまざまなシステムテーブルの主キーとしてPostgreSQLによって内部的に使用されます。 _WITH OIDS_が指定されている場合、または_default_with_oids_構成変数が有効になっている場合のみ、そのような場合にOIDがユーザー作成のテーブルに追加されます。 次の表に、いくつかのエイリアスタイプを示します。 OIDエイリアスタイプには、特殊な入力および出力ルーチンを除き、独自の操作はありません。

Name References Description Value Example
oid any numeric object identifier 564182
regproc pg_proc function name sum
regprocedure pg_proc function with argument types sum(int4)
regoper pg_operator operator name +
regoperator pg_operator operator with argument types *(integer,integer) or -(NONE,integer)
regclass pg_class relation name pg_type
regtype pg_type data type name integer
regconfig pg_ts_config text search configuration English
regdictionary pg_ts_dict text search dictionary simple

疑似タイプ

PostgreSQLタイプシステムには、集合的に疑似タイプと呼ばれる特別な目的のエントリが多数含まれています。 疑似型は列データ型として使用できませんが、関数の引数または結果型を宣言するために使用できます。

以下の表に、既存の疑似タイプをリストします。

S. No. Name & Description
1

any

関数が入力データ型を受け入れることを示します。

2

anyelement

関数が任意のデータ型を受け入れることを示します。

3

anyarray

関数が配列データ型を受け入れることを示します。

4

anynonarray

関数が配列以外のデータ型を受け入れることを示します。

5

anyenum

関数が列挙データ型を受け入れることを示します。

6

anyrange

関数が範囲データ型を受け入れることを示します。

7

cstring

関数がヌル終了C文字列を受け入れるか返すことを示します。

8

internal

関数がサーバー内部データ型を受け入れるか返すことを示します。

9

language_handler

手続き言語呼び出しハンドラーは、language_handlerを返すように宣言されています。

10

fdw_handler

外部データラッパーハンドラーは、fdw_handlerを返すように宣言されています。

11

record

未指定の行タイプを返す関数を識別します。

12

trigger

トリガーを返すようにトリガー関数が宣言されています。

13

void

関数が値を返さないことを示します。