次のページを参考にしました。
【PostgreSQL】シーケンス(serial)を作成する、値を設定する
次のデータベースを使います。
ユーザー scott
パスワード tiger123
データベース db_test
作成方法
postgres=# CREATE ROLE scott login password 'tiger123';
CREATE ROLE
postgres=# create database db_test;
CREATE DATABASE
postgres=# alter database db_test owner to scott;
ALTER DATABASE
開始時の状態
$ psql -U scott db_test
psql (15.2)
"help"でヘルプを表示します。
db_test=> \dt
リレーションが見つかりませんでした。
db_test=> \d
リレーションが見つかりませんでした。
テーブルの作成
db_test=> CREATE TABLE literature
(
seq serial NOT NULL, -- serial列
title character(10),
CONSTRAINT pk_llx PRIMARY KEY (seq)
);
CREATE TABLE
この時の状態
db_test=> \dt
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+------------+----------+--------
public | literature | テーブル | scott
(1 行)
db_test=> \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+--------------------+------------+--------
public | literature | テーブル | scott
public | literature_seq_seq | シーケンス | scott
(2 行)
データの挿入
db_test=> insert into literature(title) values('坊っちゃん');
insert into literature(title) values('草枕');
insert into literature(title) values('それから');
insert into literature(title) values('三四郎');
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
この時の状態
db_test=> select * from literature;
seq | title
-----+-----------------
1 | 坊っちゃん
2 | 草枕
3 | それから
4 | 三四郎
(4 行)
db_test=> select * from literature_seq_seq;
last_value | log_cnt | is_called
------------+---------+-----------
4 | 29 | t
(1 行)
シーケンスの値の取得
db_test=> select sequencename,last_value from pg_sequences;
sequencename | last_value
--------------------+------------
literature_seq_seq | 4
(1 行)
シーケンスを限定してシーケンスの値の取得
db_test=> select sequencename,last_value from pg_sequences where sequencename = 'literature_seq_seq';
sequencename | last_value
--------------------+------------
literature_seq_seq | 4
(1 行)
シーケンスの値の変更
db_test=> SELECT setval('literature_seq_seq',10);
setval
--------
10
(1 行)
シーケンスの値
db_test=> select sequencename,last_value from pg_sequences;
sequencename | last_value
--------------------+------------
literature_seq_seq | 10
(1 行)
データの挿入
db_test=> insert into literature(title) values('こころ');
insert into literature(title) values('明暗');
INSERT 0 1
INSERT 0 1
この時の状態
db_test=> select * from literature;
seq | title
-----+-----------------
1 | 坊っちゃん
2 | 草枕
3 | それから
4 | 三四郎
11 | こころ
12 | 明暗
(6 行)
シーケンスの値
db_test=> select sequencename,last_value from pg_sequences;
sequencename | last_value
--------------------+------------
literature_seq_seq | 12
(1 行)
注意
PostgreSQL 9.2.24 では、pg_sequences は使えません。
代わりに
db_test=> select last_value from literature_seq_seq;
last_value
------------
4
(1 行)