当前位置: 首页 > 编程笔记 >

postgresql重置序列起始值的操作

尚嘉勋
2023-03-14
本文向大家介绍postgresql重置序列起始值的操作,包括了postgresql重置序列起始值的操作的使用技巧和注意事项,需要的朋友参考一下

我就废话不多说了,大家还是直接看代码吧~

-- 序列重置到1000
alter sequence sequence_name restart with 1000
-- 验证
SELECT nextval('sequence_name');

补充:postgresql重置序列和自增主键

1. 问题背景

数据表中插入了几条测试数据,后又手动删除,导致后面插入数据的时候报主键冲突:

 ERROR: duplicate key value violates unique constraint "tableName_pkey"
DETAIL: Key (id)=(1) already exists.

即使采用INSERT IGNORE的方式或者REPLACE INTO的方式还是报错,所以就想着重置自增序列和主键。

2. 解决办法

2.1 方法一

(1)重置序列起始值为1

alter sequence xxx_id_seq restart with 1

(2)查看当前序列

SELECT nextval('xxx_id_seq ');

(3)重置自增主键

TRUNCATE tableName RESTART IDENTITY;

2.2 方法二

(1)清除所有的记录

TRUNCATE tablename questions CASCADE;

(2)清除所有的记录,并且索引号从0开始

TRUNCATE tablename questions RESTART IDENTITY CASCADE;

2.3 方法三

也有可能是自增主键和序列不一致导致的,所以也可以不用重置序列起始值和主键,采取把序列号改成和当前最大主键一致的方式:

select setval('xxx_id_seq', max(id)) from tableName;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。

 类似资料:
  • 我确实在PostgreSQL中创建了一个表,带有列id序列主键。查看pgAdmin中列的属性,我可以看到: 数据类型:整数 默认:nextval(items_id_seq::regclass) (因此,如果我没有弄错的话,我确实是用“serial”关键字创建的。) 现在在我的后端代码中,我使用的方法是:jpaRepository。deleteAllInBatch(),它将“截断”我的整个表。 在这

  • 这是我的选择代码: 如何为这个设置一个标准的begin值我想我必须设置这个变量: 如您所见,当我设置值时,select框为空,对于第二个选择,我给出了的值,选择框也是空的: 我想将每个选择框的begin值设置为静态

  • 问题内容: 在产品页面上,我有一个下拉列表,列出了与产品页面关联的当前颜色选项。 在此示例中,产品页面SKU为250E,可在以下位置使用: 如果客户选择GREEN,则我想运行一个MySQL命令,该命令将根据下面显示的custom_order值将数据更改为首先显示GREEN值。 起始值应覆盖其他数据项,然后应保留custom_order值。custom_order字段的字母类似c1,c2(它们将始终

  • 本文向大家介绍Django设置Postgresql的操作,包括了Django设置Postgresql的操作的使用技巧和注意事项,需要的朋友参考一下 这里假定Postgresql数据库已经装好。 首先安装依赖的包 $ sudo yum install python-devel postgresql-devel 如果使用virtualenv,先source一下virtualenv下的“ . bin/a

  • 问题内容: 我们正在创建现有数据库的“空白” /最小副本,并希望将序列之一重置为值。将数字放在下面的作品中,但是当导出中的序列具有更高的数字时,我想使其可重用,从而尝试避免删除和重新创建。 您是否可以执行子选择和计算的等效操作来获取值,还是需要将其设置为变量1st? 目的是以nextval的序列结尾为99999。 问题答案: 您可以使用负增量将序列重置为较低的值-此脚本(仅是您的PL / SQL块

  • 我正在测试一个删除主键列id的迁移(我希望使用外键作为主键)。当我运行并恢复迁移时,我看到表的状态是相同的,只是id列现在是最后一个。 它会以任何方式改变我的数据库的行为吗?我应该在迁移还原代码中恢复列顺序吗?

  • 问题内容: 如何在PostgreSQL中定义一列,以使每个值都必须按顺序排列,而不是使用类型时获得的顺序,而不能使值2插入,除非该列中已存在值1才能插入该值? 问题答案: 从理论上讲,您可以使用像这样工作的约束。(但是实际上它是行不通的。) 计算行数。 评估。 比较结果。 在创建CHECK约束之前,您可能必须插入一行。如果您不这样做,则max(column)将返回NULL。一排 计算行数(1)。

  • 问题内容: 我正在与Spring和Hibernate一起使用Java开发Web应用程序。假设我有一张桌子。当我从该表中删除一些记录时,有时我需要重置主键字段的值。 假设我在一个表中有10条记录,而我删除了最后5条记录。现在,当我插入新记录时,主键字段的值应从开始,但应从开始。 如果需要在MySql 中的()处启动主键值,则只需执行以下SQL语句。 这将自动重置价值,以该字段的值(在概念是不正确的,