PostgreSQLにおけるData Types: bigint:プログラミング解説


bigint型は、PostgreSQLで利用可能な整数を格納するためのデータ型の一つです。符号付きで-9,223,372,036,854,775,807から9,223,372,036,854,775,807までの範囲の値を保持できます。bigint型は、特に大きな整数を扱う必要がある場合に適しています。

利点

  • 汎用性
    bigint型は、さまざまなデータベースシステムやプログラミング言語で広くサポートされている標準的なデータ型です。そのため、異なるシステム間でデータをやり取りする場合でも、互換性の問題が発生しにくくなります。
  • 精度
    bigint型は、64ビットの整数値を保持するため、精度においてもinteger型を上回ります。これは、財務計算や科学計算など、高い精度が求められる場面で重要となります。
  • 大きな整数の保存
    bigint型は、integer型よりもはるかに大きな整数を格納できます。これは、人口、通貨量、ファイルサイズなど、非常に大きな値を扱う必要がある場合に役立ちます。

注意点

  • パフォーマンス
    bigint型の演算は、integer型の演算よりも若干時間がかかります。そのため、パフォーマンスが重要な場合は、bigint型の使用を避ける必要がある場合があります。
  • ストレージ要件
    bigint型は、integer型よりも多くのストレージ領域を必要とします。そのため、bigint型の使用を検討する際には、ストレージ容量も考慮する必要があります。

bigint型の使用例

  • ファイルシステム
    ファイルサイズなど、大きな整数を格納する場合
  • 科学データ
    実験結果、シミュレーション結果など、大きな整数を格納する場合
  • 財務データ
    金額、取引量など、高い精度が求められる整数を格納する場合
  • 人口統計データ
    国の人口など、非常に大きな整数を格納する場合
データ型許容範囲用途
smallint-32,768~32,767比較的小さな整数を格納する場合
integer-2,147,483,648~2,147,483,647一般的な整数を格納する場合
bigint-9,223,372,036,854,775,807~9,223,372,036,854,775,807非常に大きな整数を格納する場合
numeric-10^38~10^38固定小数点数の値を格納する場合
real-3.402823e+38~3.402823e+38単精度浮動小数点数の値を格納する場合
double precision-1.797693e+308~1.797693e+308倍精度浮動小数点数の値を格納する場合


-- bigint型の列を持つテーブルを作成
CREATE TABLE example_table (
  id bigint PRIMARY KEY,
  population bigint,
  file_size bigint
);

-- bigint型の値を挿入
INSERT INTO example_table (id, population, file_size)
VALUES (1, 1000000000, 1048576000);

-- bigint型の値を取得
SELECT id, population, file_size FROM example_table;

このコード例では、example_tableという名前のテーブルを作成し、idpopulationfile_sizeという3つの列を定義しています。

  • file_size列は、bigint型で定義された列です。この列には、ファイルサイズなどの大きな整数を格納できます。
  • population列は、bigint型で定義された列です。この列には、人口などの大きな整数を格納できます。
  • id列は、bigint型で定義された主キーです。

上記のコードを実行すると、example_tableテーブルが作成され、1行のデータが挿入されます。このデータには、人口が10億人、ファイルサイズが1GBのレコードが含まれています。

次に、SELECTステートメントを使用して、example_tableテーブルからすべてのデータを取得します。このステートメントを実行すると、以下の結果が表示されます。

id | population | file_size
---+------------+-----------+
1  | 1000000000 | 1048576000

この結果は、example_tableテーブルに挿入されたデータが正しく取得されたことを示しています。

以下のコード例は、bigint型のさまざまな使用方法を示しています。

  • bigint型の値を算術演算子で使用
SELECT population * 2 AS double_population FROM example_table;

このコード例は、population列の値を2倍にして、double_populationという名前の新しい列として返します。

  • bigint型の値を比較演算子で使用
SELECT id FROM example_table WHERE population > 100000000;

このコード例は、population列の値が1億を超えるレコードのid列の値をすべて返します。

  • bigint型の値を関数で使用
SELECT sqrt(file_size) AS square_root_of_file_size FROM example_table;

このコード例は、file_size列の値の平方根を計算して、square_root_of_file_sizeという名前の新しい列として返します。



numeric 型

  • 短所
    • bigint 型よりも格納容量が大きくなります。
    • 演算処理が遅くなる場合があります。
  • 長所
    • 任意の桁数と小数点以下の桁数を格納できるため、高い精度が求められる場合に適しています。
    • 複数の通貨単位で計算を行う必要がある場合など、さまざまな用途に使用できます。

decimal 型

  • 短所
    • numeric 型よりも格納容量が大きくなります。
    • 演算処理が遅くなる場合があります。
  • 長所
    • 固定小数点数の値を正確に格納できます。
    • 財務データや科学データなど、高い精度が求められる場合に適しています。

integer 型

  • 短所
    • bigint 型よりも格納できる値の範囲が狭くなります。
    • 非常に大きな整数を格納する必要がある場合は使用できません。
  • 長所
    • bigint 型よりも格納容量が小さくなります。
    • 演算処理が速くなります。
    • 多くの場合、十分な精度を備えています。

smallint 型

  • 短所
    • 格納できる値の範囲が非常に狭くなります。
    • 多くの場合、十分な精度を備えていません。
  • 長所
    • 最も小さな整型データ型であり、格納容量が小さくなります。
    • 演算処理が最も速くなります。
    • 非常に小さな整数を格納する必要がある場合は使用できます。
  • bytea 型
    バイナリデータとして数値を格納できます。ただし、数値演算を行う場合は、型変換が必要となります。
  • character 型
    数値を文字列として格納できます。ただし、数値演算を行う場合は、型変換が必要となります。
  • 互換性
    既存のシステムやアプリケーションとの互換性も考慮する必要があります。bigint 型は、広くサポートされている標準的なデータ型です。ただし、古いシステムやアプリケーションを使用している場合は、smallint 型や integer 型などの smaller 型を使用する必要がある場合があります。
  • パフォーマンス
    演算処理のパフォーマンスも考慮する必要があります。bigint 型は、smallint 型や integer 型よりも演算処理が遅くなります。パフォーマンスが重要な場合は、可能な限り smallint 型や integer 型を使用する必要があります。
  • 必要な精度
    もう 1 つの重要な要素は、必要な精度です。bigint 型は、64 ビットの整数値を格納できます。より高い精度が必要な場合は、numeric 型や decimal 型を使用する必要があります。
  • 格納する必要がある値の範囲
    最も重要な要素の 1 つは、格納する必要がある値の範囲です。bigint 型は、-9,223,372,036,854,775,807 から 9,223,372,036,854,775,807 までの範囲の値を格納できます。必要な範囲が小さい場合は、integer 型や smallint 型などの smaller 型を使用することで、ストレージ領域を節約できます。