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

PostgreSQL的字段存储类型了解

PostgreSQL的字段存储类型了解

在 PostgreSQL 中,每个字段(列)都有其存储类型,这些存储类型决定了数据库如何存储和处理该字段的数据。了解和适当地利用这些存储类型,可以提高数据库的性能和存储效率。

主要的存储类型

在这里插入图片描述

PostgreSQL 提供了四种主要的存储类型:

  1. PLAIN(p): 不允许 TOAST,数据始终存在于数据页中。适用于较短的数据类型,如整数和短的字符串。
  2. MAIN(m): 默认行为,尽可能在数据页中存储数据,若超出空间限制则使用 TOAST 进行外部存储,但不会压缩。
  3. EXTERNAL(x): 将数据存储在 TOAST 表中,但不压缩数据。适用于较大的数据块,需要避免压缩开销时。
  4. EXTENDED(e): 使用 TOAST 表,首先尝试压缩数据,如果压缩无效则使用外部存储。是 TOAST 表存储的默认方式。

注意: TOAST (The Oversized-Attribute Storage Technique) 是 PostgreSQL 用于存储超大数据的一个方法。

检查字段的存储类型

要检查特定字段的存储类型,可以查询系统视图 pg_attribute

SELECT attname, attstorage
FROM pg_attribute
WHERE attrelid = 'your_table'::regclass
AND attname = 'your_column';

其中 attstorage 的值为:

  • p: PLAIN
  • m: MAIN
  • x: EXTERNAL
  • e: EXTENDED

更改字段的存储类型

使用 ALTER TABLE ... SET STORAGE 语句可以更改字段的存储类型。

-- 更改字段的存储类型为 EXTENDED
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE EXTENDED;

-- 更改字段的存储类型为 MAIN
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE MAIN;

-- 更改字段的存储类型为 EXTERNAL
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE EXTERNAL;

-- 更改字段的存储类型为 PLAIN
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE PLAIN;

存储类型的适用场景

  1. PLAIN:

    • 用于无法使用 TOAST 技术的字段,比如短整型、布尔型等。
    • 数据较短且频繁访问,不需要额外存储操作。
  2. MAIN:

    • 默认存储方式,适用于大部分数据。
    • 数据不特别长,适用一般用途。
  3. EXTERNAL:

    • 适用于需要存储长数据但不希望压缩的场景。
    • 比如当压缩和解压缩数据代价较高或时间紧迫的应用。
  4. EXTENDED:

    • 常用于大字段,比如文本、大对象。
    • 数据会被压缩并在必要时外部存储,以节省空间。

小结

通过理解和合理选择字段的存储类型,可以帮助提高 PostgreSQL 数据库的性能和存储效率。PLAINMAINEXTERNALEXTENDED 各有其使用场景,根据具体需求和数据特性选择合适的存储策略是数据库优化的重要一环。正确配置和使用 TOAST 与 PGLZ 压缩,也能有效节约存储空间,提升性能。


http://www.kler.cn/news/330942.html

相关文章:

  • 第五周做题总结_数据结构_队列与应用
  • 初识算法 · 双指针(3)
  • 【web安全】——文件包含漏洞
  • 【Text2SQL】当前在BIRD基准测试集上取得SOTA的论文
  • Rust SQLite 跨平台使用
  • YOLO11改进 | 检测头 | 融合渐进特征金字塔的检测头【AFPN4】
  • 【web安全】——文件上传漏洞
  • 大数据与人工智能:基础与应用的多维思考
  • 【Threejs进阶教程-着色器篇】8. Shadertoy如何使用到Threejs-基础版
  • 超详细Java泛型解析,由浅入深带你认识和使用泛型
  • Kevin‘s notes about Qt---Episode 6 不同类中创建同一对象
  • 高空抛物AI检测算法:精准防控,技术革新守护城市安全
  • [C++][第三方库][gtest]详细讲解
  • 使用默认不可变的Rust变量会踩什么坑
  • 【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充
  • IDEA里面的长截图插件
  • 移动端的每日任务,golang后端数据库应该怎么设计
  • 调试分析:[跳数度量]更改为[距离度量]后的 routing_bellmanford 算法
  • 工业控制过等保三级需要的网络安全设备及详细讲解
  • ide 使用技巧与插件推荐