首页 > 代码库 > postgres的序列问题。
postgres的序列问题。
之前新建了张表,如下:
1 CREATE TABLE hl_14.cells 2 ( 3 cid integer NOT NULL DEFAULT nextval(‘cells_cid_seq‘::regclass), 4 datetime timestamp without time zone NOT NULL, 5 cellname character varying(50) NOT NULL, -- 小区名 6 nettype character varying(50) NOT NULL, -- 网络类型GSM900,GSM1800,TD 8 cgi integer NOT NULL, -- 生成函数getcgi 9 rnc character varying(50) NOT NULL,10 lac integer NOT NULL,11 ci integer NOT NULL,12 lon numeric(8,5) NOT NULL,13 lat numeric(8,5) NOT NULL,24 CONSTRAINT cells_pkey PRIMARY KEY (cid),25 CONSTRAINT cells_key UNIQUE (datetime, cgi)26 )27 WITH (28 OIDS=FALSE29 );30 ALTER TABLE hl_14.cells
因为数据要不能从前台直接文件导入,需要做处理,所以每次都是给好了cid然后导入进去的。这样查询没啥问题,但是页面插入的时候出错了。
插入的sql为 insert into cells(
datetime,cellname,...) values (,,,)。插入语句都是不给cid的,这样就导致,插入的时候报错,提示该cid已经存在,查看了下cid序列当前的信息如下:
CREATE SEQUENCE cells_cid_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 21715 CACHE 1;ALTER TABLE cells_cid_seq OWNER TO mrapp;
也就是后台手动导入的数据(给了cid的),不会同步更新序列的start值。
表的设计本身有问题,cid作为主键本身没有意义。所以改了表设计:
1 CREATE TABLE cells 2 ( 3 cid serial NOT NULL, 4 datetime timestamp without time zone NOT NULL, 5 cellname character varying(50) NOT NULL, -- 小区名 6 nettype character varying(50) NOT NULL, -- 网络类型GSM900,GSM1800,TD 8 cgi integer NOT NULL, -- 生成函数getcgi 9 rnc character varying(50) NOT NULL,10 lac integer NOT NULL,11 ci integer NOT NULL,12 lon numeric(8,5) NOT NULL,13 lat numeric(8,5) NOT NULL,25 CONSTRAINT cells_key UNIQUE (datetime, cgi)26 )27 WITH (28 OIDS=FALSE29 );30 ALTER TABLE cells
这个问题算是解决了吧。导入的时候不用给cid,由数据库分配。
postgres的序列问题。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。