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 まで。