PostgreSQLのINTEGERの最大値は2,147,483,647!

こんにちは、さるまりんです。

タイトルのままです。

PostgreSQLのINTEGER(整数型)の最大値は2,147,483,647です。

なぜこんなことをメモしているかというと、あるテーブルのidのカラムをSERIAL型で作っていました。

こんな感じです。

CREATE TABLE books (
    id SERIAL,
    title varchar(120) not null,
    price integer not null
);

このテーブルにデータを追加するINSERT文はこんな感じです。

INSERT INTO books (title, price) VALUES ('明日の希望', 1980);

どんどん追加して行っているとあるところで

ERROR: integer out of range

とエラーになってしまいました。

整数値の範囲外。。。

PostgreSQLのドキュメントを見るとSERIALは4バイトの整数(four-byte integer)とあります。

4バイトの整数の最大値は231-1=2,147,483,647です。

これを超える数を扱うことはできないんですね。

21億以上となるのであればBIGSERIALを使うことになります。
内部的にはBIGINTでこちらは8バイトの整数保持できます。
最大値は263-1です。
9,223,372,036,854,775,807。
922京を超える大きな数です。

大体のデータはこれで扱えるかな。

いきなりデータが登録できないと焦ります。
どんなデータがテーブルに入るか作成前にちゃんと気をつけないとですね。

読んでくださってありがとうございます。

それではまた!