PostgreSQL > serial (sequence)の使い方

更新日 2014-08-14
広告

データ型 serial や bigserial を利用すると、カラムの値を自動インクリメント(auto increment)できます。

よくある利用シーンは、データのIDのカラムを自動インクリメントさせたい場合です。 こうすると、データベースを利用するアプリケーション側でIDの値を管理する手間が減ります。

以下の例では、カラム id のデータ型に serial を指定して、テーブルを作成しています。

testdb=# CREATE TABLE test_auto_increment (
testdb(# id serial,
testdb(# value text);
NOTICE:  CREATE TABLEはシリアル列"test_auto_increment.id"用に暗黙的なシーケンス"test_auto_increment_id_seq"を作成します。
CREATE TABLE

NOTICE文は、ログメッセージです。インクリメント用のテーブルを、自動生成したと言っています。

次に test_table に、レコードを追加します。 カラムidはPostgreSQLが設定してくれるので、id以外の部分を指定してINSERTしてやればよいです。

testdb=# INSERT INTO test_auto_increment (value) VALUES ('first value');
INSERT 0 1
testdb=# INSERT INTO test_auto_increment (value) VALUES ('second value');
INSERT 0 1
テーブルの内容を見てみましょう。
testdb=# SELECT * from test_auto_increment;
 id  |    value     
-----+--------------
   1 | first value
   2 | second value
(2 rows)

idの値がインクリメントされていることがわかります。

idの値を指定して INSERT すると、どうなるでしょう。

testdb=# INSERT INTO test_auto_increment VALUES (300, 'third value');
INSERT 0 1

testdb=# SELECT * from test_auto_increment;
 id  |    value     
-----+--------------
   1 | first value
   2 | second value
 300 | third value
(3 rows)

指定した値(300)が設定されています。 このように、好きな値を指定することもできます。 (が、おすすめしません。idが重複する可能性が生じます)

シーケンスを初期化したい場合は、以下ように、シーケンスを1に初期化してやればよいです。

# select setval ('test_auto_increment_id_seq', 1, false);
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system