IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

PostgreSQL 自動のインクリメント

どうも、nippaです。

PostgreSQLを使うに辺り、必要な知識を勉強しています。

勉強したことを少しづつまとめていきたいと思います。

環境

PostgreSQL10.12

インクリメントについて

データベースを使っていると自動的に、数字をインクリメント(1ずつ増やしていきた)したいことがあります。

トランザクションをナンバリングしたりとか、データに順序をつける場合に使われます。

それをデータベースで自動で行ってくれるのは便利なところです。

テーブルの作成

PostgreSQLではインクリメントで、SERIAL型を使います。

ちなみに、MySQLではAUTO_INCREMENTの属性を付与します。

SERIALの中身は4bytesのintegerなので、1から最大2147483647になります。

それでも足りないようであれば、BIGSERIAL型が用意されています。

こちらは、8bytesのintegerなので、1から最大9223372036854775807までになります。

詳細はPostgreSQLの公式ドキュメントを見てください。

テーブルの作成SQLは以下のようになります。

CREATE TABLE test (
    number SERIAL NOT NULL,
    value INTEGER,
    PRIMARY KEY (number)
);

作成したテーブルの確認をします。

\d test

/* 出力結果 */
Column |  Type   | Collation | Nullable |               Default
--------+---------+-----------+----------+--------------------------------------
number | integer |           | not null | nextval('test_number_seq'::regclass)
value  | integer |           |          |
Indexes:
   "test_pkey" PRIMARY KEY, btree (number)

動作の確認

テーブルにデータを入れて、numberが自動でインクリメントされるかを確認します。

以下のSQLコマンドを実行します。

INSERT INTO test (
  value
)
VALUES
(10),
(20);

テーブルに格納したデータの確認を以下のSQLコマンドで行います。

SELECT * FROM test;
 number | value
--------+-------
      1 |    10
      2 |    20

正しく、データが格納されているかを確認してください。

ちなみに、今回の場合、valueはNULLを許容しているので、

INSERT INTO test (
  value
)
VALUES
(NULL);

NULLを格納してもnumberはインクリメントされます。

SELECT * FROM test;
 number | value
--------+-------
      1 |    10
      2 |    20
      3 |

感想

トランザクションを取ったりする場合には便利ですので、テーブル設計の際に考えても良いです。

ではでは、また次回。