PostgreSQL 设置主键的序列值
1. 问题的提出
PostgreSQL定义TABLE时,主键的字段类型可以设定为自增类型serial,即插入每条记录时,主键的值自动加1。但是,当插入数据的时候指定了具体的主键值,例如主键值从0到500,这时主键的序列值不会跟着更新到500。那么以后再自动生成主键序列值时,会出现因为主键序列值重复而无法插入新的记录的问题。
2. 解决的方法
首先使用MAX函数查询目前表中最大的主键值,然后使用setval函数把最大主键值设置为当前的序列值。
假设表名为ApplicationRunInfo, 主键字段名为ID,则序列名为ApplicationRunInfo_ID_seq。
获取当前最大主键值:
SELECT MAX("ID") FROM "ApplicationRunInfo"; 输出500
获取下一个序列值:
SELECT nextval('"ApplicationRunInfo_ID_seq"'); 输出100
设置当前最大主键值为序列值:
SELECT setval('"ApplicationRunInfo_ID_seq"', (SELECT MAX("ID") FROM "ApplicationRunInfo")); 输出500,更新成功
获取下一个序列值:
SELECT nextval('"ApplicationRunInfo_ID_seq"'); 输出501,问题解决
3.注意的事项
使用序列名时要注意,如果序列名中包含大写,必须写成'"序列名"',外层单引号,内存双引号;只使用单引号,则全部转换成小写。
nextval('"ApplicationRunInfo_ID_seq"') 序列名为ApplicationRunInfo_ID_seq
nextval('ApplicationRunInfo_ID_seq') 序列名为applicationruninfo_id_seq
序列名是表名_主键名_seq,可以在数据库的序列目录下查看,如下图所示:

SELECT setval('"ApplicationRunInfo_ID_seq"', 42); 下次nextval将返回43
SELECT setval('"ApplicationRunInfo_ID_seq"', 42, true); 和上面一样返回43
SELECT setval('"ApplicationRunInfo_ID_seq"', 42, false); 下次nextval将返回42
PostgreSQL 设置主键的序列值的更多相关文章
- postgresql设置主键
replace(((uuid_generate_v4())::character varying)::text, '-'::text, ''::text)
- 关于oracle设置主键自增的问题
关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...
- Greenplum和Postgresql的主键自增
参考:https://blog.csdn.net/u011042248/article/details/49422305 1.第一种情况就是创建数据表的时候创建主键自增,由于业务需要自己的数据表已经创 ...
- oracle中如何设置主键并且让其自动增长
由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...
- Oracle 设置主键自增长__Oracle
转自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的 ...
- 使用powerdesigner建模时设置主键自增的问题
研究了一下,其实只要双击表,选择columns,再双击在你所要设为自增型的键上(比如你的id)或者右键选择Properties,弹出一个ColumnProperties 对话框,我们看到有标识 ide ...
- Oracle 设置主键自增长
如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的常用功能,我们还是有办法实现的.这里将展示使用触发器来实现主键自增. 1.准备 ...
- PL/SQL设置主键自增
oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu: 一.创建表 create table menu( menuId n ...
- Django数据库怎么给字段设置主键
id = models.IntegerField(primary_key = True) 附: null :缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField ...
随机推荐
- ADMEMS软件架构的4个阶段
业界软件架构设计的方法论很多,各有各自的应用场景和特点,下文结合ADMEMS(Architecture Design Method has been Extended to Method System ...
- wpf控件提示Value ‘’ can not convert
我们在对控件的ErrorTemplate设置后,有时会出现Value '' can not convert. 为什么会出现呢? 原因:如果控件的输入值和null不能转换(比如控件要求的是int或flo ...
- GWT嵌入纯HTML页面
众所周知,gwt页面是java代码所写,不存在html页面直接作用于gwt面板中.不过gwt也倒是提供了一些可用的功能,比如frame,这个是UI中的一个,内部可以设置URL,但是经过我测试后发现,这 ...
- bash 中的行处理命令 awk
转自:http://blog.chinaunix.net/uid-23302288-id-3785105.html
- 机器学习:数据归一化(Scaler)
数据归一化(Feature Scaling) 一.为什么要进行数据归一化 原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的: 问题:特征数字化后,由于取值大小不同,造成特征空间中样本 ...
- CSS-MUI:笔记-01
ylbtech-CSS-MUI:笔记 1. mui-navbar 导航条返回顶部 1.1.样式一 1.2. <div class="mui-navbar-inner mui-bar ...
- 侯捷STL学习(七)--深度探索vector&&array
layout: post title: 侯捷STL学习(七) date: 2017-06-13 tag: 侯捷STL --- 第十六节 深度探索vector vector源码剖析 vector内存2倍 ...
- 部署和调优 2.9 mysql主从配置-3
测试 先给主mysql解锁 > unlock tables; 删除一个表 > use db1; > show tables; > drop table help_categor ...
- C语言枚举类型enum-(转)-温故而知新
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等. 以每周七天为例, ...
- java执行linux命令的工具类
package com.starfast.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ja ...