PostgreSQL シーケンス操作

シーケンス操作の例一覧 nextval/currval/setval

変更

SQL

--シーケンスを進める SELECT nextval('foo_seq');

実行

nextval --------- 1001

再実行

nextval --------- 1002

加算される値はincrement_byに依存(デフォルトは1)

pgdb=# SELECT last_value FROM foo_seq; last_value ------------ 1000 (1 行) pgdb=# begin; BEGIN pgdb=# SELECT nextval('foo_seq'); nextval --------- 1001 (1 行) pgdb=# SELECT nextval('foo_seq'); nextval --------- 1002 (1 行) pgdb=# SELECT nextval('foo_seq'); nextval --------- 1003 (1 行) pgdb=# rollback; ROLLBACK pgdb=# SELECT last_value FROM foo_seq; last_value ------------ 1003 (1 行)

トランザクションで進めたシーケンスの値はロールバックしても元に戻らない。

SQL

--シーケンスの値を設定 SELECT setval('foo_seq', 1000);
setval --------- 1000

SQL

--シーケンスがセットされた場合は1001を返す SELECT setval('foo_seq', 1000, true); --シーケンスがセットされた場合は1000を返す SELECT setval('foo_seq', 1000, false);
setval --------- 1000

trueの場合

pgdb=# SELECT * FROM foo_seq; sequence_name | last_value | start_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called ---------------+------------+-------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- foo_seq | 1000 | 1 | 1 | 9223372036854775807 | 1 | 1 | 0 | f | t (1 行)

falseの場合

pgdb=# SELECT * FROM foo_seq; sequence_name | last_value | start_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called ---------------+------------+-------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- foo_seq | 1000 | 1 | 1 | 9223372036854775807 | 1 | 1 | 1 | f | f (1 行)

\dでも確認可能

pgdb=# \d foo_seq; シーケンス "public.foo_seq" 列 | 型 | 値 ---------------+---------+--------------------- sequence_name | name | foo_seq last_value | bigint | 1000 start_value | bigint | 1 increment_by | bigint | 1 max_value | bigint | 9223372036854775807 min_value | bigint | 1 cache_value | bigint | 1 log_cnt | bigint | 1 is_cycled | boolean | f is_called | boolean | f

初期化

SQL

--シーケンス初期化(セットされた場合は1を返す) SELECT setval('foo_seq', 1, false);

取得

SQL

--シーケンスの現在の値を取得 SELECT currval('foo_seq');
currval --------- 1000

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について