PostgreSQL 大对象管理指南:pg_largeobject 从原理到实践
概述有时候,你可能需要在 PostgreSQL 中管理大对象,例如 CLOB、BLOB 和 BFILE。PostgreSQL 中有两种处理大对象的方法:一种是使用现有的数据类型,例如用于二进制大对象的 bytea 和用于基于字符的大对象的 text;另一种是使用 pg_largeobject。本文将解释如何使用 pg_largeobject。pg_largeobjectpg_largeobject
当数据库宕机时,PostgreSQL 高可用在背后做了什么?
本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:孟飞龙,瀚高股份研发工程师。本文主要从以下 4 个方面进行分享:前言故障检测与转移问题探讨结语前言前言部分主要介绍一些 PostgreSQL 高可用相关的概念,让大家对高可用有一个大概的了解。PostgreSQL 高可用简述高可用的作用在数据库宕机的危机时刻,PostgreSQL 高可用架构会通
PostgreSQL 中唯一索引的工作原理
引言在研究分区表相关解决方案时,曾聚焦于如何在包含多个子表的分区表内,实现跨分区的数据唯一性保障。这类功能有时被称为全局索引,相关领域的讨论可参考邮件线程此处。尽管其中提出的思路具备一定合理性,但对应的实现方式却引发了较多争议 —— 该方式改变了分区索引的存储逻辑,本质是将所有分区索引合并存储,并以TableOid作为内部引用的键值。基于此,探索一种替代方案:在不改变 PostgreSQL 原有核
GraphRAG 在 PostgreSQL 上的实践
本文整理自“IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛”上的分享内容,演讲者:傅宇,PolarDB for PostgreSQL 研发负责人。本文主要分享如何通过 Graph 的方式让 RAG 运行的更好,主要涉及以下内容:为什么需要 GraphRAG构建知识图查询知识图在 PostgreSQL 上实践为什么需要 GraphRAGRAG 的诞生是为了解决一个特定领域的知
从disable_cost到disabled_nodes,最小代价预估质的飞跃
在HOW2025大会优化专场,老杨分享了修改disable_cost为GUC结合pg_hint_plan实现精准执行计划控制的实践。主要是举例了一个极端case,在17版本依然需要disable_cost的动态调整来实现hint精准指定索引。对于disable_cost的讨论早在2019年就开始了,一直持续到现在,可参考社区邮件。邮件前期主要是讨论disable_cost默认常量值不足,往往导致s
如何设置 Lustre 文件系统并在其上运行 PostgreSQL
概述与 PostgreSQL 类似,Lustre 文件系统也是一个开源项目,始于大约 20 年前。根据维基百科,Lustre 文件系统是一种并行分布式文件系统,专为大规模集群计算设计,支持原生远程直接内存访问(RDMA)。Lustre 文件系统具有可扩展性,可用于多个计算机集群,包含数万个客户端节点、数十 PB 的存储容量(分布在数百台服务器上),以及超过 1TB/s 的聚合 I/O 吞吐量。本文
了解 PostgreSQL 的 MVCC 可见性基本检查规则
1. 引言根据 Vadim Mikheev 的说法,PostgreSQL 的多版本并发控制(MVCC)是一种“在多用户环境中提高数据库性能的高级技术”。该技术要求系统中存在同一数据元组的多个“版本”,这些版本由不同时间段内获取的快照进行管理。换句话说,在这种技术下,PostgreSQL 需要根据多个参数(如获取的快照、当前事务 ID 等)来判断哪些元组对用户是“可见”的,哪些是不可见的。这也被称为
PostgreSQL 从参数调优到 AI 诊断的实战指南
本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛中的演讲,演讲嘉宾:王丁丁,工业互联网数据库专家,PostgreSQL ACE。本文将从以下五个方向展开:参数调优基础性能优化进阶架构设计实践AI 诊断工具链未来方向两个场景场景一:数据库突然变慢了,我们该怎么办?在日常的应用中,我们有时会发现,数据库突然变慢了。遇到这种问题,我们该怎么办?上一体机?换数据库?换硬件
使用 libpq 的 COPY 协议维护自定义 PG 到 PG 连接
1. 引言最近在我的开发工作中,需要在主节点上的 PG 后端与备节点上的其他 PG 后端之间维护一个自定义连接,以传输除现有 walsender/walreceiver 连接所传输的 WAL 数据之外的自定义数据。当然,我可以简单地创建一个新的独立后端并自己维护一个 socket 连接来传输自定义数据。从技术上讲,这是可行的,但也会带来一些问题。自定义连接的持久性、用户安全性、数据加密都需要额外处
Bruce Momjian 的旅行揭示了 Postgres 的未来
Bruce Momjian 不仅为 Postgres 发声,他也在倾听它的声音。今年夏天,他在四大洲的城市中,从夏洛特到深圳,与学生、企业领导者和开源新人坐在一起,每个人都有不同的故事,但都怀揣着同一个目标:构建一个开放、持久且免费的系统。作为 Postgres 的联合创始人及社区倡导者,在 EDB 的支持下,Bruce Momjian 几十年来致力于将 PostgreSQL 发展成一场全球运动。
如何使用 pg_rman 进行 PostgreSQL 的备份与恢复
概述PostgreSQL 是一种非常流行的开源关系型数据库管理系统,广泛应用于众多生产环境中。为了确保生产环境始终正常运行,您需要使用多种工具,其中备份与恢复工具是必不可少的。本篇博客将介绍一种专为 PostgreSQL 设计的备份与恢复工具,即 pg_rman。什么是 pg_rmanpg_rman 是一个免费的实用程序,专为 PostgreSQL 数据库的备份与恢复设计。它可以对整个数据库集群进
PGSQL运维优化:提升vacuum执行时间观测能力
6 月底济南召开的 HOW2025 IvorySQL 生态大会上,我在内核论坛分享了 "提升 vacuum 时间观测能力" 的主题,提出了新增统计信息的方法,增强 vacuum 执行时长的观测能力。同时也给大家分享了一些 DBA 上手内核的感悟。vacuum 在 PG 中是一个无法绕开的话题,甚至有些用户因为 vacuum 的特性而放弃 PG。老杨认为只要做好 vacuum 的
深入解析 PostgreSQL 外部数据封装器(FDW)的 SELECT 查询执行机制
引言PostgreSQL 中的外部数据封装器(Foreign Data Wrapper, FDW)是一种扩展,允许您像访问 PostgreSQL 数据库中的表一样,访问和操作存储在外部数据源中的数据。FDW 使 PostgreSQL 能够与多种数据存储系统(包括关系型和非关系型)进行集成,并以统一的方式在 PostgreSQL 环境中呈现这些数据。将一个表拆分成多个位于远程的较小表的操作也称为&n
探索表访问方法功能:顺序扫描分析
在之前的文章中,我们讨论了 PostgreSQL 表访问方法 API 的基础知识以及堆元组(heap tuple)与元组表槽(Tuple Table Slot,简称 TTS)之间的区别。本文将深入探讨 PostgreSQL 核心如何通过特定的 API 调用实现顺序扫描。涉及的 API为了实现顺序扫描,以下表访问方法 API 回调将会被调用:relation_size()slot_callbacks
深入 PostgreSQL 内部:5 个关键阶段拆解查询处理全流程
引言当您向 PostgreSQL 发送查询时,后端会经历多个处理阶段。每个阶段承担着不同的职责,以确保您能在最短时间内获得准确响应。虽然这些阶段可能庞大而复杂,但理解它们在查询处理中的角色对 PostgreSQL 开发者至关重要。本文将概述每个查询处理阶段的功能及其在 PostgreSQL 架构中的重要性。5 个查询处理阶段解析器(Parser)PostgreSQL 的解析器使用 lex(Flex
突破关系型边界:PostgreSQL 的 JSON 如何重新定义数据敏捷性
前言在本文中,我们将讨论 PostgreSQL 如何实现和处理 JSON 对象。读者需要具备一定的 Linux、Postgres 和 JSON 的基础知识,因为我们不仅会介绍这些新特性,还会讲解如何实现它们。本文是基于运行在 Ubuntu 23.04 上的 PostgreSQL 16(开发版本)撰写的。首先,我将简要回顾一下 JSON 的背景,然后讲解如何在 Postgres 中使用 JSON,最
深入理解 PostgreSQL Planner:简化扫描路径与查询计划
引言当向 PostgreSQL 发送查询时,查询通常会经过几个处理阶段,并最终返回结果。这些阶段如下所示:解析(Parse)分析(Analyze)重写(Rewrite)计划(Plan)执行(Execute)在本文中,我们将仅关注“计划”阶段或“规划器(Planner)”模块,因为这是最有趣或最复杂的阶段。我将分享我对规划器模块的理解,并探讨它如何处理一个简单的顺序扫描。规划器的目标非常简单:从可用
如何在 PostgreSQL 中运行 TLS 回归测试
概述本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试。Postgres 回归测试每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL 提供的测试,以确保没有损坏。如果新功能或修复没有相应的测试,我们应该考虑添加一些,以确保在未来进行其他更改时不会出现问题。PostgreSQL 提供了一份全面的文档,解释了所有可用的测试。例如,如果您想运行