LoginSignup
0
0

More than 1 year has passed since last update.

PostgreSQL: シーケンスの使い方

Last updated at Posted at 2023-03-23

次のページを参考にしました。
【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 行)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0