PostgreSQL数据库常见问题
设置组件id自增
- 常见类型
|类型|最大长度|
|:--|:--|
| smallserial | 32767 |
| serial | 2147483647 |
| bigserial | 9223372036854775807 |
-- 创建学生表
create TABLE "stuList"(
id SERIAL PRIMARY key, -- 主键,int类型,自动增长
"createTime" timestamp, -- 创建时间 类型 yyy/mm/dd 00:00:00
"modifyTime" TIMESTAMP
)
create TABLE "stuList"(
id uuid primary key, -- id使用Guid
"createTime" timestamp, -- 创建时间 类型 yyy/mm/dd 00:00:00
"modifyTime" TIMESTAMP
)
bool类型
- 在pg数据库中,t表示true,f表示false
设置日期格式
- 日期类型
timestamp
-
默认格式:
yyyy-mm-dd HH:mm:ss:fff
-
显示格式:
yyyy-mm-dd HH:mm:ss
- pg数据库中,如需要设置为上面的格式,需要设置长度为0
-- 创建菜单栏目表
create table menuList(
id int PRIMARY key not null,
create_time timestamp(0),-- 创建时间,设置长度为0
)
自增序列号,问题
- 当插入数据的id,小于数据库最大序列值
-- 当新建表,导入一批数据,序列不是从1开始,那么使用程序插入数据,会从1开始,当字段增长到导入数据的编号时,会报错,字段重复,解决方法
-- 1 创建序列使用 “CREATE SEQUENCE”
-- my_sequence 是序列的名称,START WITH 1表示序列从1开始,INCREMENT BY 1表示每次增加1
CREATE SEQUENCE my_sequence
START WITH 1
INCREMENT BY 1;
-- 2 将序列与表中的ID字段关联起来。可以通过设置字段的默认值为序列的下一个值来实现
-- orderForm表名,id默认自增字段,my_sequence,序列名称
ALTER TABLE "orderForm"
ALTER COLUMN id SET DEFAULT nextval('my_sequence');
-- 3 设置序列的起始值
-- 3.1 查询最大值
SELECT MAX(id) FROM "orderForm";
-- 3.2 更新或修改序列起始值
SELECT setval('my_sequence', 8406, true);
-- 重新设置序列的起始值
SELECT setval('my_sequence', 8406, false);
-- setval() 用于设置序列的值。更新序列起始值
-- 设置序列起始值为当前最大ID + 1(假设当前最大ID为1000)
SELECT setval('orderForm_id_seq', 1000, true); -- true表示下一次nextval返回1001:ml-citation{ref="2,3" data="citationList"}
-- 若手动插入数据导致序列未更新,需手动同步序列值:
SELECT setval('orderForm_id_seq', (SELECT MAX(id) FROM "orderForm"), true); -- true表示下一次nextval返回MAX(id)+1:ml-citation{ref="6,7" data="citationList"}
-- 查询下一个序列值
-- nextval() 用于获取序列的下一个值。
SELECT nextval('my_sequence')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?