PostgreSQL数据库的序列

PostgreSQL数据库的序列

一、序列重置

第一种方式

执行以下 sql 修改起始序列为 1,也可以自定义为其他值

ALTER SEQUENCE test_tables_id_seq RESTART WITH 1;
ALTER SEQUENCE test_tables_id_seq RESTART WITH 100;

第二种方式

如表中已存在数据一般采用 MAX(id) 来做自适应,避免冲突报错

SELECT setval('test_tables_id_seq', (SELECT MAX(id) FROM test_tables));

二、查看序列值

当前值

SELECT currval('test_tables_id_seq')

下一个值

会导致序列 +1 哦

SELECT nextval('test_tables_id_seq')

三、怎么查看表关联的序列

第一种方式

通过表定义查看序列

CREATE TABLE "public"."test_tables" (
  "id" int8 NOT NULL DEFAULT nextval('test_tables_id_seq'::regclass)
)

第二种方式

使用 SQL 查询 pg_catalog 或 information_schema**:编写 SQL 查询来从 pg_catalog 或 information_schema 模式中检索表的定义

SELECT
  "column_name",
  data_type,
  character_maximum_length,
  is_nullable,
  column_default
FROM
  information_schema."columns"
WHERE
  "table_name" = 'test_tables'
  AND table_schema = 'public';

结果
image

问题

  1. 如果表中没有数据不能使用 SELECT setval('test_tables_id_seq', (SELECT MAX(id) FROM test_tables));方式没有生效。这种情况推荐使用 ALTER SEQUENCE test_tables_id_seq RESTART WITH 1;来进行重置

参考

深入解读PostgreSQL中的序列及其相关函数的用法 - phpStudy

posted @ 2024-07-11 17:43  bigroc  阅读(1)  评论(0编辑  收藏  举报