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 设置主键的序列值的更多相关文章

  1. postgresql设置主键

    replace(((uuid_generate_v4())::character varying)::text, '-'::text, ''::text)

  2. 关于oracle设置主键自增的问题

    关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...

  3. Greenplum和Postgresql的主键自增

    参考:https://blog.csdn.net/u011042248/article/details/49422305 1.第一种情况就是创建数据表的时候创建主键自增,由于业务需要自己的数据表已经创 ...

  4. oracle中如何设置主键并且让其自动增长

    由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...

  5. Oracle 设置主键自增长__Oracle

    转自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的 ...

  6. 使用powerdesigner建模时设置主键自增的问题

    研究了一下,其实只要双击表,选择columns,再双击在你所要设为自增型的键上(比如你的id)或者右键选择Properties,弹出一个ColumnProperties 对话框,我们看到有标识 ide ...

  7. Oracle 设置主键自增长

    如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的常用功能,我们还是有办法实现的.这里将展示使用触发器来实现主键自增. 1.准备 ...

  8. PL/SQL设置主键自增

    oracle没有设置主键auto increment的功能,需要自己编写序列和触发器实现主键自动递增. 示例: 创建表menu:   一.创建表 create table menu( menuId n ...

  9. Django数据库怎么给字段设置主键

    id = models.IntegerField(primary_key = True) 附: null :缺省设置为false.通常不将其用于字符型字段上,比如CharField,TextField ...

随机推荐

  1. bzoj 5092 [Lydsy1711月赛]分割序列——高维前缀和

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 套路地弄一个前缀异或和,就变成 f[ i ]=max_{j=0}^{i} { s[ j ...

  2. Poj 2488 A Knight's Journey(搜索)

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  3. java代码,用continue写出偶数

    总结:不满足条件时,输出当前==== package com.b; import java.util.Scanner; //用continue写出偶数的代码是: public class twe { ...

  4. java代码异常篇

    总结:掌握流.缓冲区类的方法 package com.b; import java.io.BufferedReader; import java.io.File; import java.io.Fil ...

  5. JPA,EclipseLink 缓存机制学习——树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  6. 目录扫描工具-Dirsearch

    下载项目,并打开 ┌─[root@sch01ar]─[/sch01ar] └──╼ #git clone https://github.com/maurosoria/dirsearch ┌─[root ...

  7. ORA-04098 trigger 'DBBJ.DB_EV_ALTER_ST_METADATA' is invalid and failed re-validation

    转自:https://blog.csdn.net/dragoo1/article/details/9411105 ORA-04098: trigger 'DBBJ.DB_EV_ALTER_ST_MET ...

  8. XMPP 客户端和服务端

    GPLv2授权不能商用 XMPP协议的客户端软件列表 http://zh.wikipedia.org/wiki/XMPP%E5%8D%94%E8%AD%B0%E7%9A%84%E5%AE%A2%E6% ...

  9. 用JS,打印99乘法表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. python爬虫(8)--Xpath语法与lxml库

    1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...