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 ...
随机推荐
- JS计算字符串的长度
最近项目上经常要用到计算字符串的长度的问题,有时需要按照byte进行计算长度,所以我就想在页面上用js实现,于是就到网上查了相关的资料,发现确实有很多的版本,这里给出两个比较好用的. //方法一:逐个 ...
- docker registry 镜像删除
registry:2.5.0版本的镜像,将镜像默认存放在了/var/lib/registry 目录下 /var/lib/registry/docker/registry/v2/repositories ...
- Kosaraju
https://www.cnblogs.com/nullzx/p/6437926.html
- Qt多选框
1.获取并显示复选框文本内容 ui->label->setText(ui->comboBox->currentText());
- Django基础(二)—— models
六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ...
- 杂项:MIME(多用途互联网邮件扩展类型)百科
ylbtech-杂项:MIME(多用途互联网邮件扩展类型)百科 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用 ...
- eclipse中创建包时变成文件夹,且文件夹内的类无法被其他类引用
1.检查该文件夹是否已经被配置到了工程的build path里source folders ===>右键工程 选Build Path->Configure Build Path就可以看到 ...
- 使用Asset Pipeline管理rails生产环境静态资源实现步骤
1. 修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: &q ...
- VMware安装操作系统(Operating System not found一个错误原因)
因为指定的IOS文件是多种操作系统的组合,如Win7(32位和64位完全版),那么安装的时候选择一个操作系统类型和ios文件的类型就匹配不上,所以出现这种错误.
- CentOS 7.2 部署Rsync + Lsyncd服务实现文件实时同步/备份 (一)
接收端配置: 1.安装rsync yum -y install rsync 2.配置同步模块 1. 编辑同步配置文件 vi /etc/rsyncd.conf 2. 同步模块配置参数 # any nam ...