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';
结果
问题
- 如果表中没有数据不能使用
SELECT setval('test_tables_id_seq', (SELECT MAX(id) FROM test_tables));
方式没有生效。这种情况推荐使用ALTER SEQUENCE test_tables_id_seq RESTART WITH 1;
来进行重置
参考
本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/18296793
blog:http://www.bigroc.cn 博客园:https://www.cnblogs.com/bigroc