当前位置: 首页 > news >正文

PostgreSQL数据类型怎么选才高效不踩坑?


url: /posts/bf54711525c507c5eacfa7b0151c39d2/
title: PostgreSQL数据类型怎么选才高效不踩坑?
date: 2025-09-27T01:23:27+08:00
lastmod: 2025-09-27T01:23:27+08:00
author: cmdragon

summary:
PostgreSQL 提供丰富的原生数据类型,涵盖数值、字符、日期、几何、网络等多个场景。数值类型包括整数、串行、浮点和精确数值,选择时需权衡范围、精度和存储成本。字符类型有固定长度、可变长度和无长度限制的选项,适用于不同文本存储需求。日期/时间类型支持时区处理,推荐使用timestamptz确保跨时区一致性。此外,PostgreSQL 还支持布尔、二进制、几何、网络、JSON 和 UUID 等类型,满足多样化数据存储需求。合理选择数据类型能提升存储效率、避免数据错误并优化查询性能。

categories:

  • postgresql

tags:

  • 基础入门
    • PostgreSQL
  • 数据类型
  • 数值类型
  • 字符类型
  • 日期时间类型
  • JSON类型
  • UUID类型

cmdragon_cn.png

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/

一、PostgreSQL 数据类型概述

PostgreSQL 提供了丰富的原生数据类型,覆盖数值、字符、日期、几何、网络等多个场景。这些类型的设计遵循 SQL 标准,同时扩展了PostgreSQL特有的功能(如几何类型、JSONB)。理解数据类型是设计合理表结构的基础——选择合适的类型能提升存储效率、避免数据错误、优化查询性能

二、核心数据类型详解

2.1 数值类型:精准存储数字

数值类型是最常用的类型之一,分为整数、串行、浮点、精确数值四大类,选择时需权衡范围、精度、存储成本

2.1.1 整数类型:固定范围的整数

PostgreSQL 支持3种整数类型,差异在于存储大小和取值范围

  • smallint(int2):2字节,范围 -32768 ~ 32767,适合存储小范围整数(如“性别编码”“评分1-5”)。
  • integer(int4/int):4字节,范围 -2147483648 ~ 2147483647,最常用(如“用户ID”“商品数量”)。
  • bigint(int8):8字节,范围 -9223372036854775808 ~ 9223372036854775807,适合超大整数(如“订单量”“雪花ID”)。

示例:创建存储商品库存的表:

-- 库存表:商品ID用integer,库存数量用smallint(假设库存不超过3万)
CREATE TABLE product_stock (product_id integer PRIMARY KEY,stock smallint NOT NULL CHECK (stock >= 0)  -- 库存不能为负
);-- 插入数据
INSERT INTO product_stock (product_id, stock) VALUES (1001, 500), (1002, 1200);
2.1.2 串行类型:自动递增的整数

串行类型(smallserial/serial/bigserial)是自动递增的整数,本质是“整数类型 + 序列(Sequence)”的组合,适合作为主键(Primary Key)。

  • smallserial(serial2):对应smallint,自动递增范围1~32767。
  • serial(serial4):对应integer,范围1~2147483647(最常用)。
  • bigserial(serial8):对应bigint,范围1~9223372036854775807。

示例:用serial作为用户表主键:

-- 用户表:user_id自动递增
CREATE TABLE users (user_id serial PRIMARY KEY,  -- 等价于:user_id integer PRIMARY KEY DEFAULT nextval('users_user_id_seq')username varchar(50) NOT NULL UNIQUE
);-- 插入数据时无需指定user_id,自动生成
INSERT INTO users (username) VALUES ('alice'), ('bob');-- 查询结果:user_id会是1、2
SELECT * FROM users;
2.1.3 浮点类型:近似数值

浮点类型(real/double precision)用于存储近似小数,适合不需要精确计算的场景(如科学计算、统计预估)。

  • real(float4):4字节,精度约6位有效数字。
  • double precision(float8/float):8字节,精度约15位有效数字。

注意:浮点类型有精度损失,比如0.1无法精确存储,因此财务计算(如金额)绝对不能用浮点类型

示例:存储商品重量(允许近似):

CREATE TABLE products (product_id integer PRIMARY KEY,weight real  -- 重量,单位kg(如1.23kg)
);INSERT INTO products VALUES (1001, 1.23), (1002, 4.5678);
2.1.4 精确数值类型:无精度损失

numeric(或decimal)用于存储精确小数,适合财务、金融等需要高精度的场景(如金额、税率)。格式为numeric(p, s)

  • p:总有效位数(精度),范围1~1000。
  • s:小数位数(刻度),范围0~p(默认0)。

示例:存储订单金额(精确到分):

CREATE TABLE orders (order_id serial PRIMARY KEY,amount numeric(10, 2) NOT NULL  -- 总金额,最多10位数字,2位小数(如99999999.99)
);INSERT INTO orders (amount) VALUES (123.45)</
http://www.dtcms.com/a/415279.html

相关文章:

  • 岳阳网站开发建设小程序模板消息推送规则
  • 文本编码--BPE
  • 信息安全仿真环境十一
  • 淡水网站建设跨境电商运营基础知识
  • 山西省建设厅官网站小公司使用的网站开发
  • 红宝书 基础词回忆
  • 【靶场练习】--DVWA第三关CSRF(跨站请求伪造)全难度分析
  • 商城网站建设正规公司光辉网站建设公司
  • Linux读者写者问题与读写锁
  • Kurt-Blender零基础教程:第3章:材质篇——第2节:凹凸感和置换形变;混合材质节点和NodeWrangler的五大用法;简单的UV纹理绘制
  • 潍坊高密网站建设wordpress myisam
  • 南充能够建设网站的公司有网站制作专家
  • @Import 导入bean对象
  • JavaScript 介绍
  • AiNiee - AI 翻译工具
  • 【Qt6项目转Qt5项目的一些API设置】
  • 音乐网站开发环境描述要建设一个网站需要准备些什么
  • display ip interface brief 概念及题目
  • asp网站整站下载器网站建设入什么科目
  • 网站建设国内排行如何做网站 知乎
  • 网站关于 模板三亚网站优化
  • Nginx部署vue以及转发配置记录
  • Elasticsearch - 分布式搜索与分析引擎
  • 网站开发者模式下载视频设计网站做多大合适
  • wordpress建企业商城南宁网站的优化
  • 通才机器人策略中的捷径学习:数据集多样性和碎片化的作用
  • 【轮播图】HTML+CSS+JavaScript实现轮播图
  • Low-Overhead Sensing RS Design for Integrated Sensing and Communication (ISAC)
  • 如何快速收录一个网站的信息网页设计与制作作业成品免费
  • MyEclipse在高分辨率显示屏上图标显示太小的解决方案