PostgreSQL:序列的使用方法

我参考了下一页。
【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

这个时候的状态 (Zhè ge shí de

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 行)
bannerAds