技術資料

PostgreSQLでシーケンスを使って連番を管理する方法

2007.12.01

error この記事は最終更新日から17年以上が経過しています。

データベースでデータを管理する上で、何らかの連番の数字を割り振って、一意の ID とするのは、よくある手法かと思います。

例えば「最近飲んだお酒リスト」なんていうテーブルがあったら、

LiquorList
LiquorID LiquorName LiquorDate
1 モスコミュール 2007-11-26
2 白ワイン 2007-11-27
3 モスコミュール 2007-11-28
4 モスコミュール 2007-11-29
5 ウォッカ 2007-11-30

こんな感じで、「LiquorID」に数字を連番で振っていく、というケースですね。

こういう風に、順番に番号を振っていく際に使うのが、sequence(シーケンス)というものです。

sequence (シーケンス) の作成

sequence (シーケンス) は、「create sequence シーケンス名 オプション」という SQL文で、作成できます。

例えばシンプルに、1 からスタートして、1 ずつ増加していく「LiquorID_seq」シーケンスを作る場合は、下記のような SQL文になります。

create sequence LiquorID_seq;

初期値を 1 ではなく、例えば 10001 にしたい場合は、「start」というオプションをつけて、

create sequence LiquorID_seq start 10001;

とやれば OK 。

sequence (シーケンス) を使ったテーブルへのデータ追加 (insert文)

とりあえず、連番の数字を管理するためのシーケンスはできあがりました。

次は、実際にこのシーケンスで管理している数字を、テーブルに反映しないといけないわけです。

前述の「最近飲んだお酒リスト」の例だと、「2007年12月1日はビールを飲んだ」場合、このテーブルに 6番目のデータとして、

  • LiquorID ⇒ 6
  • LiquorName ⇒ ビール
  • LiquorDate ⇒ 2007-12-01

を追加する必要があります。

で、LiquorID の連番の数字は先ほど作成したシーケンス「LiquorID_seq」で管理しているので、そのデータを参照する必要があります。

シーケンスで管理している連番の数字の「次の番号」を取得する際には「nextval」という関数を利用します。

具体的には、

insert into LiquorList (LiquorID, LiquorName, LiquorDate)
values (nextval('LiquorID_seq'), 'ビール', '2007-12-01');

という SQL文でデータを追加すれば、自動的にLiquorIDには「次の数字」である 6 が入るわけです。

nextval 関数を呼び出したら、自動的に、参照したシーケンス内の数値は「次の数字」に更新されるので、楽チンです。

もっと楽に連番を発行する方法

実は、create table 文でテーブルを作成する際に、フィールドに対して「serial」というデータ型を指定すれば、勝手にシーケンスを作って、データ挿入時も勝手に連番を発行してくれます。

なので今回の例の場合でも、最初にテーブルを作る際に、

create table LiquorList (
LiquorID serial PRIMARY KEY,
LiquorName text NOT NULL,
LiquorDate timestamp NOT NULL);

みたいな感じにしておけば、勝手に LiquorList_LiquorID_seq という名前のシーケンスも同時に作成してくれます。

さらに、その後テーブルにデータを追加する際も、

insert into LiquorList (LiquorName, LiquorDate) values ('ソルティドッグ','2007-12-02');

という風に、LiquorID には何も指定せずに insert しても、自動的に LiquorID には LiquorList_LiquorID_seq の「次の数字」が入ってくれます。
凄く楽です。

初心者向けphpPgAdminインストールガイド—PostgreSQL管理をWebで楽に

2007.12.03

phpPgAdminを使ったPostgreSQLデータベース管理の手順を丁寧に解説。必要な設定ファイルの編集から、Basic認証の設定、動作確認まで、わかりやすく紹介します。

PostgreSQL

PostgreSQLで複数テーブルを結合して効率的にデータ処理を行う方法

2007.11.26

PostgreSQLを使って、複数のテーブルを結合し、効率的にデータを取得・処理する方法について解説します。実際のショッピングサイトのデータを例に、INNER JOIN句を使って、ユーザー情報と注文情報を一度のクエリで結合する方法を紹介。

Perl PostgreSQL

PerlのDBIモジュールで始めるPostgreSQLデータベース操作入門

2007.08.11

PerlでPostgreSQLデータベース操作を行うための「DBIモジュール」の基本的な使い方を解説します。接続方法やデータの追加・更新・削除・検索の操作に加え、効率的なSQL文の実行方法まで。

Perl PostgreSQL

PostgreSQL入門:データベースの作成から基本操作まで

2007.08.07

「PostgreSQLを使い始めたいけど、どこから手をつけて良いか分からない」という方へ。この記事では、データベースの作成方法から、psqlでの操作、テーブルの構築やデータの挿入・表示まで、PostgreSQLの基本的な使い方を丁寧に解説します。

PostgreSQL

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP