HTLF

一步一个脚印,走出高度...

导航

统计

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类型

  1. 在pg数据库中,t表示true,f表示false

设置日期格式

  • 日期类型timestamp
  1. 默认格式:yyyy-mm-dd HH:mm:ss:fff

  2. 显示格式: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')

posted on   HTLF  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示