PostgreSQLでシーケンスを使って連番を管理する方法
2007.12.01
error この記事は最終更新日から17年以上が経過しています。
データベースでデータを管理する上で、何らかの連番の数字を割り振って、一意の ID とするのは、よくある手法かと思います。
例えば「最近飲んだお酒リスト」なんていうテーブルがあったら、
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で複数テーブルを結合して効率的にデータ処理を行う方法
2007.11.26
PostgreSQLを使って、複数のテーブルを結合し、効率的にデータを取得・処理する方法について解説します。実際のショッピングサイトのデータを例に、INNER JOIN句を使って、ユーザー情報と注文情報を一度のクエリで結合する方法を紹介。
PerlのDBIモジュールで始めるPostgreSQLデータベース操作入門
2007.08.11
PerlでPostgreSQLデータベース操作を行うための「DBIモジュール」の基本的な使い方を解説します。接続方法やデータの追加・更新・削除・検索の操作に加え、効率的なSQL文の実行方法まで。
PostgreSQL入門:データベースの作成から基本操作まで
2007.08.07
「PostgreSQLを使い始めたいけど、どこから手をつけて良いか分からない」という方へ。この記事では、データベースの作成方法から、psqlでの操作、テーブルの構築やデータの挿入・表示まで、PostgreSQLの基本的な使い方を丁寧に解説します。