PostgreSQL 序列使用
今天遇到的一个问题,postgrelsql出现的duplicate key value violates uniqueconstraint"字段名",查询后发现报错出的数值小于字段所在表中已存在的数值,所以会无法插入,而且每执行一次,数值都会加1,所以就想直接将此值设置为大于已有的最大值,于是网上一搜索,是序列的原因,用到了下面的资料
在数据库中主键的生成一般是通过序列来生成,PG的序列知识主要罗列如下: 如何找到序列的名称:用pgadmin打开当前所用数据库,在schemas->sequences下找到相关的序列,然后SELECTnextval('im_indicator_results_seq');查看当前的序列号,在去相关的表中查看已有的最大序列号,如:selectmax(result_id) from im_indicator_results;,最后设置当前序列号为最大序列号SELECTsetval('im_indicator_results_seq',5288); 1.PG序列的创建 方法a:直接在表中指定字段类型是 SERIAL 类型就一了 CREATE TABLE person ( id SERIAL,name TEXT );方法b:先创建序列名称,然后在新建的表中列属性指定序列就可以了,该列需INT类型列 CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval('person_id_seq'),name TEXT );2.PG序列的应用 查看当前会话的序列值 SELECT currval('person_id_seq') ;查看下一个序列值 SELECT nextval('person_id_seq') ;查看全局的最后一个序列值 select last_value from person_id_seq;重置序列值 select setval(seq_name,new_seq_value);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |