首页 > 数据库 >postgresql 导入数据库表并重设自增属性的操作

postgresql 导入数据库表并重设自增属性的操作

时间:2023-06-22 20:11:41浏览次数:53  
标签:postgresql seq nextval sequence 设自增 导入 序列 table id

postgresql使用navicat软件导出数据库表,在导入会数据库的操作

postgresql 的自增字段 是通过 序列 sequence来实现的。

1、先删除导出的数据库表中的自增属性

2、导入数据库表之后,需要创建序列。

注:一般序列名称由数据表名+主键字段+seq组成 (通常情况下主键字段即为自增字段),如下表名为cof_table_hot_analysis,主键字段为 id

create sequence cof_table_hot_analysis_id_seq  start with 1  increment by 1  no minvalue  no maxvalue  cache 1;

3、设置表字段(id)自增sql

alter table cof_table_hot_analysis alter column id set default nextval('cof_table_hot_analysis _id_seq ');

4、上面三步设置完之后

自增字段id默认值是1,如果需要设置自增之后的其实数值,例如16

函数 返回类型 描述
nextval(regclass) bigint 递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。
currval(regclass) bigint 在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过 nextval,那么会报告一个错误。)请注意因为此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。
lastval() bigint 返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。
setval(regclass, bigint) bigint 重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。
setval(regclass, bigint, boolean) bigint 重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。

注意序列名中有大写字母时,regclass参数值需要用双引号括和单引号一起括起来,比如:

select nextval('"ACT_ChecklistItem_Id_seq"');

除了setval函数,还有另一种方法也是修改sequence的start_value,也是会更新序列的当前值:

项目部署上去需要插入一些基础数据,所以新增数据的ID不是从1开始,修改sequence的start_value (下次执行nextval得到的是start_value,而不是start_value+1) 。

alter sequence s_seq restart with 2

相当于select setval('s_seq',2,false)

select setval('cof_table_hot_analysis_id_seq', 16)

5、清空表格时要重置序列新数据才会从1开始自增

truncate table cof_table_hot_analysis restart identity

扩展:

删除序列:

drop sequence [ if exists ] name [, ...] [ cascade | restrict ]

修改序列:

alter sequence name [ increment [ by ] increment ]  [ minvalue minvalue | no minvalue ] [ maxvalue maxvalue | no maxvalue ]  [ start [ with ] start ]  [ restart [ [ with ] restart ] ]  [ cache cache ] [ [ no ] cycle ]  [ owned by { table.column | none } ]alter sequence name owner to new_owneralter sequence name rename to new_namealter sequence name set schema new_schema

补充:pgsql添加自增序列、设置表某个字段自增

添加自增序列

create sequence 表名_id_seqstart with 1increment by 1no minvalueno maxvaluecache 1;

设置表某个字段自增

alter table表名 alter column id set default nextval(‘表名_id_seq');

从当前最大id依次递增

select setval(‘表名_id_seq',(select max(id) from 同一个表名));

大写字符的表需要加双引号。

例如:

select setval('“表名_id_seq”',(select max(id) from “表名”));

标签:postgresql,seq,nextval,sequence,设自增,导入,序列,table,id
From: https://www.cnblogs.com/javaxubo/p/17498244.html

相关文章

  • PostgreSQL中表名、字段名大小写问题
    感谢原文章博主:https://blog.csdn.net/zengchaoyue/article/details/8279744学习hibernate的时候,数据库用了PostgreSQL,第一节课就抛错,User实体映射没有死活不能导出表。总是提示这一句:​*ERROR:syntaxerroratornear"User"。*​后来发现,如果把表名设成t_user这......
  • 导入表注入初步介绍
    目录初识PE文件格式DOSDosheaderDosStub(存根)NTHeaderSignatureFileHeaderOptionalHeaderSectionTableImportTableIMAGE_IMPORT_BY_NAME开始我们注入导入表的旅程吧初识PE文件格式DOSDosheader比较重要的有e_magic和e_lfanew两个属性。其中e_magic属性用来判断这个文......
  • PostgreSQL日期相减
    在PostgreSQL中可以直接对时间进行加减运算:、SELECTnow()::timestamp+'1year';--当前时间加1年SELECTnow()::timestamp+'1month';--当前时间加一个月SELECTnow()::timestamp+'1day';--当前时间加一天SELECTnow()::timestamp+'1hour';--当前时间加一个小时......
  • postgresql日期相关函数
    感谢原博文:https://blog.csdn.net/lixinkuan328/article/details/107969398一、Postgresql中string转换成timestamp类型Mybatis+PostgresqlTO_DATE(#{startTime},'YYYY-MM-DD')ANDop_date<![CDATA[>=]]>TO_TIMESTAMP(#{beginTime},'YYYY-MM-DDH......
  • PostgreSQL被除数为0的处理方法
    PostgreSQL被除数为0的处理方法方法一:使用case语法selectcasewhenid=0then0elseid/2endfromc2;方法二:自定义操作符CREATEORREPLACEFUNCTIONDIV_ZERO(NUMERIC,NUMERIC) RETURNSNUMERICAS$BODY$ SELECTCASEWHEN$2=0THEN0ELSE$1/$2END; $BODY$ L......
  • MySQL败给了PostgreSQL!
    在软件领域,数据库是毫无疑问的中流砥柱。在这片历史悠久、玩家众多的沃土上,流传着着无数技术和商业交织的故事。如今,老一代商业数据库日薄西山,开源数据库步步为营,处在浪潮之巅的我们已然可以看见其中的暗流涌动。在这场群雄逐鹿的戏码里,MySQL与PostgreSQL之争渐趋白热化。MySQL的......
  • POSTGRESQL 短查询优化,独立索引与组合索引 8
    这是一个关于POSTGRESQL查询的优化系列,这已经是这个系列的第八集了,接上期,在OLTP查询中我们需要注意的查询优化的地方非常多,稍不留意就会在一些问题上的操作导致查询的数据逻辑错误。继续上次的问题,在查询中,针对事件的查询问题,我们一般处理的模式 1 针对具体事件字段的时间标注......
  • postgresql SQL 优化 -- 理论与原理
    这里写的是一个系列,关于POSTGRESQLSQL优化的问题,这篇是这个系列的第二篇,第一篇可以在文字的末尾的连接中找到,之前有同学提出,希望有一个历史文字的连接。这期就进入正题,一个SQL语句撰写出来是怎么开始工作的,也就是查询的过程queryprocessing ,这里从几个步骤入手1  一个SQL......
  • Postgresql SQL 优化 两个模型与数据存储
    这里写的是一个系列,这是系列的第三篇,这个系列主要是针对SQL优化,前两篇的地址下文字的最下方。接上次,上次提到了SQL优化的原理与理论,实际上SQL优化的原理是离不开两个模型与数据存储的, 整体SQL优化的核心也在于两个模型和数据存储。简化的说明这两个模型1 数据访问成本模型2 ......
  • PostgreSQL 从开发要换PG表字段的 collaion 说起 到 程序员别异想天开了
    2021年绝对是一个有意思的念头,估计过10年都会想到今年的一些变革,很多人都会被影响,改变,重新开始,或寻找新的路径。归正题,新公司的开发小朋友,对DB提出了一个问题,就是要修改某个表的字段的collation,究其原因为了某些业务中这个字段的排序。然后我就告诉DB,NONONO,究其原因曾经SQLSE......