于2021-04-20 加入墨天轮


PostgreSQL培训考试认证中心
关注TA
写留言
150
文章
19
粉丝
24K+
浏览量
个人成就
发布150次内容
获得21次点赞
内容获得3次评论
获得19次收藏
回答了0次问答
文章分类
postgresql
(102)
postgresql考试
(14)
数据库
(12)
墨力计划
(10)
postgresql认证
(7)
信创数据库
(7)
postgresql培训认证
(3)
mysql
(3)
postgresql培训
(2)
postgresql 15
(2)
国产数据库
(2)
pg认证
(2)
展开
文章档案
2025年03月
(4)
2025年02月
(7)
2025年01月
(6)
2024年12月
(8)
2024年11月
(17)
2024年10月
(7)
2024年09月
(15)
2024年08月
(17)
展开
最新评论
动态
文章 ·150
数说 ·0
问答 ·0
文档 ·0
关注
留言板·2
【PGCCC】PostgreSQL Certified Master 个人专访 | 第二期 何雄
由PGCCC发起的“PostgreSQL Certified Master个人专访”栏目,旨在挖掘PCM们对数据库行业的深度洞察,分享他们对行业发展的思考和个人感悟,对广大PGer们具有实际借鉴意义。大家好,我是何雄,工作中的英文名:Sean (肖恩)。也有一个曾经使用很多年的网名:iihero。目前在SAP北京研究院从事数据库领域相关工作。我来自湖北(黄冈)蕲春,位于湖北东南部,明代医药学家李时珍的故乡,同时也是一个教授县。附带说一下,业余拿过国家武术职业教练资格证,中国武术六段,陈式太极拳第13代传人,国家一级段位考评员,多年担任北京陈式太极拳研究会副秘书长。一直坚持传授陈式太极拳给大众。大概2011、2012年开始接触PG。相对于其他数据库管理系统,PG学习难度是相对适中的。PG在未来10年,仍然是最被期待和寄与厚望的开源数据库。
发布文章于
4天前
[]使用 pg_input_is_valid 验证 Postgres 中半结构化数据加载的数据类型
pg_input_is_valid是一个可以查询的 SQL 函数,它将确定给定的输入是否可以解析为特定类型,如数字、日期、JSON 等。这是一个非常基本的查询,用于询问“123”是否是有效的整数。此函数给出 t-真和 f-假的响应。因此,如果我问,SELECT pg_input_is_valid;答案将是“f”,因为这不是日期。这不需要特殊的错误处理或特殊的脚本,它直接内置在 Postgres 中,可以与标准 SQL 一起使用。
发布文章于
2025-03-11
AI大模型企业级培训(可定制)招生简章
系统化课程设计 + 实战演练 + AI领域一线资深专家亲授。技术原理到企业级应用,全面覆盖AI大模型核心技能。确保企业员工学以致用,赋能企业效率提升与业务增长!23年信息技术与服务行业工作经验,与全球多个团队合作。18年IBM工作经验,专注于IBM云数据库、IaaS和PaaS、人工智能、企业内容管理等领域的研发、运维和技术支持。在云计算、数据与分析、人工智能、大数据等方面拥有深厚的技术背景和实践经验。撰写了多份详尽和专业的国家级技术报告。拥有超过15年的发明经历,获得超260项已授权专利或专利申请。多个全球会议的演讲者,包括KubeCon、IstioCon、开源峰会、CloudNativeCon等。在阿尔卡特朗讯、百度、IBM和Intel等知名企业担任资深研发工程师。致力于云原生与LLM技术的交叉应用创新和研发实践。授课主题“Serverless 应用案例赏析”,于2018年10月在IBM开源技术微讲堂发表。从技术研发到商业落地,大模型技术助力企业智能化升级!智能客服、办公自动化、多模态融合等多场景覆盖,助力企业业务创新!
发布文章于
2025-03-11
【PGCCC】PostgreSQL Certified Master 个人专访 | 第一期 王丁丁
个人专访”栏目,旨在挖掘PCM们对数据库行业的深度洞察,分享他们对行业发展的思考和个人感悟,对广大PGer们具有实际借鉴意义。也是工作需要,2021年我就开始接触了PostgreSQL,平时主要负责数据库架构、部署、运维、排除故障、性能优化等工作内容。国内新政策下,有多家知名公司已经基于PG研发自主可控的数据库产品,所以自己也相应的要掌握好相关技能,做好国产话替代,同时考取了PostgreSQL一些证书,撰写一些博客和B站技术分享。PGCCC认证由讲师进行线上培训,老师都是业内非常有经验的,大多数都在行业超过10年运维经验 。PG是除Linux之外最具影响力开源软件之一,是用户去O开源数据库首选,PG的核心价值在于企业用户可以低成本的使用优秀的PG管理核心数据资产。
发布文章于
2025-03-05
【PGCCC】PostgreSQL 高阶实战必修课:破局“五面埋伏“,7周攻克DBA核心战场!
“面对备份故障、性能瓶颈、迁移难题…你是否被困在运维迷局?7周密集实战,30小时深度内容,IT邦德老师带你破局「五面埋伏」,掌握PostgreSQL高阶技能,成为企业不可或缺的DBA精英!”CSDN博客专家,B站知名UP主,全网粉丝超15万,著有《MySQL职场私房菜》。拥有Oracle 19C OCM、MySQL8 OCP等多项权威认证。5年+数据库教培经验,结合企业案例,广受好评。10年+DBA运维及大数据实施经验,服务40+大公司,精通主流数据库技术。从备份恢复、高可用架构到性能调优、数据迁移、分布式扩展,覆盖DBA/运维工程师90%工作场景.学完即可应对企业生产环境中的常见问题,提升工作效率,降低运维风险。深度解析真实工具链,提供自动化脚本与案例,直击生产环境痛点。包含执行计划优化、Vacuum机制等高阶技能,以及Citus、TimescaleDB、PGVector等新兴技术实战。不仅掌握高频面试技能,还能拓展大数据与AI场景能力,提升职场竞争力。限时优惠,报名即赠1560元PCA课程!额外福利:课程结束后评选3名优秀学员,颁发奖品!
发布文章于
2025-02-28
【PGCCC】PostgreSQL 的弊端(第一部分):临时表
PostgreSQL 是世界上最强大的数据库系统之一。我一直对它的强大功能充满热情,尤其是它的现代 SQL 语言功能。
发布文章于
2025-02-25
【PGCCC】pg_squeeze 1.8:自动表膨胀清理的扩展
PostgreSQL 扩展可从表中删除未使用的空间,并可选择根据特定索引对元组进行排序。事实上,我们尝试替换 pg_repack扩展。利用 PostgreSQL 数据库服务器的最新改进。虽然 使配置和使用都更简单,但它还允许使用后台工作者相当顺利地实现无人值守处理。在继续之前安装 PostgreSQL。确保有pg_config二进制文件,这些通常包含在-dev和-devel包中。这对于处理其他事务在 pg_squeeze执行其工作时可能进行的更改是必要的。要使pg_squeeze扩展程序了解表,您需要在squeeze.tables表中插入一条记录。一旦添加,就会定期检查表的统计信息。tabschema和tabname分别是模式和表名。例如,上面的条目表明表public.bar应该每周三和周五的 22:30 检查。rel_tablespace是应将表移入的现有表空间。skip_analyze表示表处理后不能跟 ANALYZE 命令。squeeze.table 是用户唯一需要修改的表。还可以手动压缩表格而无需注册,并且无需事先检查实际膨胀。
发布文章于
2025-02-13
【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试
通过禁用参数可以来调整事务工作负载synchronous_commit。该措施有惊人效果。但在操作系统崩溃期间丢失已提交事务的可能性使其成为许多应用程序无法启动的因素。
发布文章于
2025-02-10
【PGCCC】在 PostgreSQL 上使用 pg_hint_plan替换 Oracle Hints 的最佳实践
PostgreSQL 采用了一种截然不同的查询优化方法。Postgres 社区历来强调依靠基于成本的规划器来根据统计数据、索引和配置参数选择执行计划,而不是支持内置提示。在迁移情况下,这尤其复杂,因为性能可能取决于之前使用 Oracle 提示指定的特定执行计划。这就是pg_hint_plan扩展的作用所在。在这篇文章中,我们将探讨 Oracle 的提示系统和 PostgreSQL 的规划器与 pg_hint_plan 之间的区别,讨论在 Postgres 查询中何时仍然需要提示,并介绍有效使用 pg_hint_plan 的最佳实践,包括pganalyze如何提供帮助。将所有 Oracle 提示迁移到 pg_hint_plan 可能很诱人,但在 PostgreSQL 中,这可能有点过头,有时甚至适得其反。让我们来谈谈提示在经过良好调整的 Postgres 环境中的适用之处。PostgreSQL 是围绕基于成本的规划器构建的,该规划器通常无需人工干预即可选择有效的执行路径。
发布文章于
2025-02-08
【PGCCC】表级锁剖析:减少锁定影响
我之前撰写有关PostgreSQL 中表级锁的剖析的博客。在这篇博客中,我们讨论了数据库系统使用锁定机制的原因以及 Postgres 如何利用 MVCC 来避免大多数并发问题,从而减少锁定的必要性。在这篇后续文章中,我们将讨论锁争用,以探索减少生产系统中锁定影响的方法,以减少与 DDL 更改相关的潜在停机风险。在 PostgreSQL 中,这种情况通常发生在需要独占锁的架构修改期间,或者在对同一行执行大量并发 DML 操作期间。在 PostgreSQL 中进行架构更改或运行维护任务时,尽量减少锁定至关重要,以免阻塞其他查询并降低性能。并非所有操作都需要相同级别的锁定,PostgreSQL 提供了工具和技术来尽量减少锁定影响。与不带 的相同语句相比,CREATE INDEX CONCURRENTLY或 等命令获取的限制较少的锁,从而允许其他操作继续进行。此单个命令需要ACCESS EXCLUSIVE锁并将重写整个表。如果您希望NOT NULL在列上设置一个集合,那么现在设置它只是元数据操作,因为 Postgres 足够聪明,可以识别有效的CHECK约束。之后,您还应该删除现在冗余的CHECK约束。
发布文章于
2025-02-06
【PGCCC】用于全文搜索的全新 Postgres 块存储布局
我们最近完成了迄今为止最大的工程项目之一:将pg_searchPostgres 的全文搜索和分析扩展 迁移到 Postgres 的块存储系统。
发布文章于
2025-02-05
【PGCCC】PostgreSQL 中表级锁的剖析
本博客解释了 PostgreSQL 中的锁定机制,重点关注数据定义语言 操作所需的表级锁定。锁定还是解锁的艺术?我们大多数人可能都是通过深入研究“锁定”一词来理解 PostgreSQL 中与物理锁没有太大关系的概念,物理锁主要与安全性有关。然而,Postgres 锁完全是关于并发性的,以及控制哪个事务可以持有锁,而另一个事务可以执行其操作,理想情况下不会相互阻塞。但正如我们所知,没有一个世界是完美的,无论是门锁还是AccessShareLock…但是,既然我已经买了那些关于锁的书,我想我应该可以对开锁艺术和数据库锁定机制进行一些比较。同样,要想管理数据库锁,你需要了解数据库的内部工作原理,主要是 Postgres 中的并发工作原理。PostgreSQL 使用多版本并发控制 来避免传统上与数据库相关的许多锁定问题。当事务更新数据时,Postgres 会创建行的新版本,同时保留旧版本。虽然 MVCC 设计并非 PostgreSQL 独有,但得益于这种方法,我们解决了大多数并发性问题。同一 DDL 命令的不同变体可能需要不同级别的锁定强度。
发布文章于
2025-01-21
【PGCCC】空闲事务导致表膨胀?等等,什么?
是的,你没看错。空闲事务可能导致大量表膨胀,而清理过程可能无法解决这一问题。膨胀会导致性能下降,并可能通过死元组不断侵占磁盘空间。本博客深入探讨了空闲事务如何导致表膨胀、为什么这会带来问题以及避免这种情况的实用策略。PostgreSQL 使用多版本并发控制 机制来维护数据一致性。当这些死元组堆积起来且未被移除时,膨胀就会成为问题,从而增加表和索引的大小。PostgreSQL 中的空闲事务是连接到数据库但未主动发出查询的会话。空闲事务有两种主要状态:。当事务处于“事务中空闲”状态时,它会保留数据库的快照,防止删除可能仍需要访问的行。这些事务会持有锁或快照,从而阻止自动清理或手动VACUUM操作等清理过程。空闲事务乍一看似乎无害,但它们可能会导致表膨胀、阻塞维护任务和不必要地消耗资源,从而悄悄导致严重的性能问题。
发布文章于
2025-01-20
【PGCCC】PostgreSQL 事务及其使用方法
在本文中,我们将回答所有这些问题以及更多问题,以帮助您开始使用 PostgreSQL 事务和实施。简单来说,事务就是对数据库中任何更改的传播。假设您向数据库添加了一个新元素 — 这是事务的一个例子。在实际应用中,事务通常是各种数据库操作的组合。关于 PostgreSQL 事务,需要注意的重要一点是它们符合ACID标准。这意味着它们是一致的、原子的、持久的和隔离的。如果您想了解有关符合 ACID 的含义以及其他类型的合规性的更多信息,请查看这篇文章。如果一个事务由于某种原因失败,数据库不会受到影响,其他事务仍可继续进行。事务的主要卖点是易于处理。另一个可以使用事务避免的数据丢失事件是AMAG Pharmaceuticals 数据丢失事件。PostgreSQL 中的事务取决于特定事务中表行的哪些版本可见。元组可见性也是维护 PostgreSQL 中事务原子性的关键。在 PostgreSQL 中实现事务非常简单,这要归功于多年来的文档和来自全球开发人员的支持。按照以下步骤开始在Arctype中使用 PostgreSQL 。现在,我们必须使用 PostgreSQL join 命令连接这两个表。
发布文章于
2025-01-13
【PGCCC】PostgreSQL 临时文件的使用
某些查询操作需要一些内存功能。此内存由运行时配置提供work_mem。请注意,对于复杂查询,可能会并行运行多个排序或哈希操作;在开始将数据写入临时文件之前,通常允许每个操作使用此值指定的内存量。ORDER BY、DISTINCT 和合并连接。哈希表用于哈希连接、基于哈希的聚合、结果缓存节点和基于哈希的 IN 子查询处理。一旦超过设置值work_mem,操作就会开始写入临时磁盘文件。指定维护操作使用的最大内存量。当 CREATE 命令未明确指定表空间时,此变量指定在其中创建临时对象的表空间。当列表中有多个名称时,PostgreSQL每次要创建临时对象时都会从列表中随机选择一个成员;但在事务中,连续创建的临时对象将放置在列表中连续的表空间中。如果列表中的选定元素是空字符串,PostgreSQL 将自动使用当前数据库的默认表空间。ostgreSQL 的默认安装将默认表空间 设置为temp_tablespaces。临时文件仅在查询期间保留。控制临时文件名和大小的日志记录。
发布文章于
2025-01-13
【PGCCC】PostgreSQL 的一些你可能不知道但应该尝试的功能
PostgreSQL包含许多重要的功能。他们中的许多人都非常知名。其他人可以是非常有用的,但没有广泛赞赏。PostgreSQL带有一个简单的非持久基于主题的发布 - 订阅通知系统。它不是Kafka,但功能确实支持常见用例。关于特定主题的消息可以广播给正在监听该主题的所有连接的订阅者。这些消息被 Postgres服务器推送给侦听客户端。轮询不是必需的,但您的数据库驱动程序应支持异步向应用程序传递通知。通知由主题名称和有效负载组成。有效载荷通常是一个JSON字符串,但它当然可以是任何东西。NOTIFY'foo_events','{“userid”:42,“action”:“grok”}'. 假如有一张叫 “invoices(发票)” 的表。你现在想支持 “government invoices”,这种发票在原来的发票之上添加了一些字段。不妨试试继承功能:。Column | Type | Collation | Nullable | Default. 你知道你可以有一张虚表用来指向另一个PostgreSQL实例吗?
发布文章于
2025-01-09
【PGCCC】在 PostgreSQL 中,如何优化对于日期范围的查询?
在 P在 PostgreSQL 中,处理日期范围的查询是常见的操作。然而,如果不进行适当的优化,这些查询可能会导致性能问题,特别是在处理大型数据集时。
发布文章于
2025-01-07
【PGCCC】PostgreSQL 作为向量数据库:入门和扩展
从使用 pgvector 扩展启动 PostgreSQL,加载 Airbnb 数据集,到查找相关房源,还提到了扩展性能和可扩展性的方法,如使用专用索引和分布式版本如 YugabyteDB。PostgreSQL 拥有丰富的扩展和解决方案生态系统,使我们能够将该数据库用于通用人工智能应用程序。最后,我们将拥有一个功能齐全的生成式人工智能应用程序,向前往旧金山旅行的人推荐 Airbnb 房源。OpenAI 聊天模式:在此模式下,Node.js 后端利用OpenAI 聊天完成 API和 GPT-4 模型根据用户的输入生成住宿推荐。Postgres Embeddings 模式:最初,后端使用OpenAI Embeddings API将用户的提示转换为嵌入。Postgres 利用 pgvector 扩展在数据库中进行相似性搜索。它允许您存储和处理具有数千个维度的向量,计算向量化数据之间的欧几里德距离和余弦距离,并执行精确和近似最近邻搜索。文件大小为 174MB,前提是它已包含使用 OpenAI 嵌入模型为每个 Airbnb 房产的描述生成的嵌入。
发布文章于
2024-12-26
【PGCCC】解锁 7 大技巧,避免你的 Postgres 挂掉
从 PostgreSQL 11 开始,添加带默认值的列不再重写表。本博文中的其他提示仍然有效!PostgreSQL 的黄金法则是:在生产中向表添加列时,千万不要指定默认值。
发布文章于
2024-12-25
【PGCCC】Postgresql Varlena 结构
postgresql 会有一些变长的数据类型,存储都是采用 varlena 格式的,通过语句SELECT typname FROM pg_type WHERE typlen = -1就可以看到所有采用 varlena 格式的数据类型,比如常见的 text ,json 类型。注意这是通用格式,varlena还分为很多种格式,每种格式的定义都不相同。
发布文章于
2024-12-20
【PGCCC】Postgres 和 MySQL 应该怎么选?
在建设任何应用系统时,选择合适的数据库是一个关键决策点,它直接影响到系统的性能、可扩展性、可维护性以及未来的发展能力。PostgreSQL和MySQL作为市场上最受欢迎的两种开源关系数据库管理系统,经常成为这一决策的焦点。本文将深入分析和比较这两种数据库技术,旨在为开发者、架构师以及技术决策者提供全面的指南。MySQL特别被Web开发社区所青睐,因为它的高性能、可靠性以及易用性。数据库功能的强弱直接关联到它能够处理的业务类型和复杂性,这里,我们将PostgreSQL和MySQL在几个关键功能方面进行对比。MySQL也支持存储过程和触发器,但是它的存储过程语言不如PostgreSQL强大。MySQL虽然也具备全文搜索能力,但通常需要借助外部工具才能达到PostgreSQL内置功能的水平。评估PostgreSQL和MySQL在处理大量读写操作时的性能表现。PostgreSQL在处理复杂的事务和并发场景时仍然表现良好,但其TPS略低于MySQL。PostgreSQL提供了全面的ACID兼容性,支持4个标准的事务隔离级别,并且有着成熟的MVCC实现。
发布文章于
2024-12-18
【PGCCC】为什么高性能场景选用Postgres SQL 而不是 MySQL
MySQL MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS 应用软件之一。LAMP中的M指的就是MySQL。
发布文章于
2024-12-16
【PGCCC】 pg_query 6.0:使用 Postgres 自己的解析器解析、反解析和规范化 SQL 查询的 Ruby 库
此外,该扩展允许您规范化查询并将这些规范化的查询再次解析为解析树。当您构建此扩展时,它会构建 PostgreSQL 服务器源的部分,然后将其静态链接到此扩展中。这看起来很复杂,但这是解析所有有效 PostgreSQL 查询的唯一可靠方法。由于编译 PostgreSQL 的部分内容,在较慢的系统上安装可能需要一段时间。预计最多需要 5 分钟。这是一个简单的例子deparse,对于更复杂的修改,请使用walk!。# Faster fingerprint method that is implemented inside the native C library
发布文章于
2024-12-09
【PGCCC】DELETE很困难
您的数据库运行良好 - 直到一个简单的 DELETE 操作使其崩溃。虽然我们倾向于专注于优化 SELECT 和 INSERT 操作,但我们经常忽略 DELETE 的隐藏复杂性。然而,删除不必要的数据同样重要。过时或不相关的数据会使您的数据库膨胀、降低性能并使维护成为一场噩梦。更糟糕的是,在没有合理理由的情况下保留某些类型的数据甚至可能导致合规性问题。乍一看,DELETE 命令似乎很简单。但是当您尝试在生产环境中运行类似的 DELETE 时会发生什么,因为那里的数据集要大几个数量级?在本文中,我们将揭示为什么 DELETE 操作需要仔细考虑并探讨如何有效地处理它们。AFTER DELETE 触发器:如果定义了 AFTER DELETE 触发器,则会执行该触发器。现在的关键问题是 DELETE 是否真的是我们数据库所能承受的最困难的操作。UPDATE 通常仅修改有限数量的列,从而降低了索引更新的潜在数量。
发布文章于
2024-12-05
【PGCCC】为什么 PostgreSQL 主要版本升级很困难
PostgreSQL 主版本之间的升级非常烦人。您不能只安装服务器二进制文件然后重新启动,因为数据目录的格式不兼容。令人惊讶的是,数据格式实际上大部分兼容,但并不完全兼容。出现一些很难解决的问题。自从引入pg_upgrade 以来,它们已经兼容了很长时间。例如,btree 有一个简单的版本控制机制:。PostgreSQL 数据库的架构数据存储在所谓的 系统目录中,这些目录本身就是表。例如,在 PostgreSQL 17 中,订阅获得了一个新的 故障转移标志。因此,pg_subscription 行的硬编码大小会发生变化,新字段后某些字段的偏移量 subfailover也会发生变化。如果您升级到 PostgreSQL 17 并想要创建故障转移订阅,这是无法做到的,因为目录仍为旧格式。系统目录是普通表的想法可能是 Berkeley Postgres 的原创想法。需要明确的是,这并不是轻松升级的唯一障碍。但我认为这是最重要的障碍。因为到目前为止还没有必要。由于 pg_upgrade 和其他升级程序都不保留 WAL,所以这不是问题。
发布文章于
2024-12-04
【PGCCC】Postgresql Free Space Map 文件解析
postgresql 的表包含了多种类型的文件,其中 main 类型的文件存储实际的数据,以数据块的格式存储,称为 data block。
发布文章于
2024-11-26
【PGCCC】B+Tree 的并发优化 BLink-Tree
B+Tree 被数据库普遍使用,作为索引实现的基础。网上的资料也非常多,所以这里也不再详细介绍。但是基于 B+Tree 的并发优化,资料却非常少,所以这篇来讲讲 B+Tree 的一种并发优化,那就是BLink-Tree。为了讲述得更加清楚,我会通过图的形式,来详细阐述每一步骤。BLink-Tree,它与传统的 B+Tree 区别,就是非叶子节点,也会有个指向同层级的旁边节点的指针。这个指针在优化并发上面,起到了核心作用。这里我将右边的叶子节点都省略掉了,因为下面的节点都没有涉及到它。这里先讲解 BLink-Tree 的插入操作,这里设计了一个相对复杂的场景,会触发多个父节点分裂。首先计算出分裂后的节点,也就是和 两个节点。接下来我们需要向父节点添加 23 这个元素,这样才能构成标准的B+Tree。这里需要提下 BLink-Tree 论文适用的场景,它认为数据都是存储在磁盘里的,并且磁盘可以提供原子性的读写。结果发现 27 处于右边节点,所以它才会向下继续寻找子节点。所以 postgresql 在数据查找时,加上了读锁。
发布文章于
2024-11-22
【PGCCC】Postgresql 缓存替换算法
postgresql 使用缓存来作为与磁盘读写的中间层,但是缓存的大小是有限的,当缓存不够用时需要剔除一些不常用的。postgresql 主要提供了两种替换算法,ring 算法和 clock sweep 算法,分别针对批量读写和正常读写。ring算法适合那些批量读写的场景,因为操作数据都是一次性的,这些数据在使用后就没有作用了。如果频繁的触发缓存替换,对性能造成没必要的损耗的。ring算法的原理很简单,它有一个环状数组,数组的每个元素都对应一个buffer,注意到buffer的分配是动态的,也就是说开始的时候,数组的元素都为空。当这个buffer被分配了,它会一直存在,不会被替换掉,除非被明确释放掉。clock sweep 算法根据访问次数来判断哪些数据为热点数据。为了加快查找空闲 buffer 的速度,postgresql 使用链表来保存这些buffer。链表节点由 BufferDesc 结构体表示,它的 freeNext 成员指向下一个节点。为了快速找到指定buffer的引用计数,postgresql 提供了一个数组作为一级缓存,使用哈希表作为二级缓存。这个数组的长度为8,每个元素占有 8byte,选择数
发布文章于
2024-11-21
【PGCCC】pgvector 0.8.0 发布并可在 Nile 上使用
pgvector 社区发布了备受期待的 0.8.0 版本,该版本在性能和功能方面均有显著改进。我们当然迫不及待地想将它提供给 Nile 用户。
发布文章于
2024-11-20
【PGCCC】PostgreSQL 数据库设计中的文本标识符 | 翻译
无论是设计独立应用程序还是微服务,您都不可避免地会遇到共享标识符的话题。无论是网页的 URL、RESTful API 资源、JSON 文档、CSV 导出还是其他内容,特定资源的标识符都会被暴露。例如,客户、客户或订单的数量可能是企业希望保密的信息。这些原因和其他原因导致文本标识符的使用增加。它们的可读性和多功能性使其成为外部数据共享的理想选择。然而,在数据库设计中,文本标识符的优势往往被其带来的问题所掩盖。在本文中,我们将探讨在数据库设计中直接使用文本标识符的场景,并讨论有效使用它们的策略。这种性能差距会严重影响大型数据集,从而影响应用程序效率。文本标识符使管理表之间的关系变得复杂。与 BIGINT 相比,现实世界中很少有场景需要全范围的 UUID。即使是 8 字节的 BIGINT 也更节省存储。即使是可排序的 UUID 也可能无法比 BIGINT 或精心构造的文本标识符等更精简的选项提供显着的优势。
发布文章于
2024-11-19
【PGCCC】PostgreSQL中有许多个timeout,逐个弄懂它们的含义和使用
Sets the time to wait on a lock before checking for deadlock. 死锁检测相对昂贵,因此服务器不会在每次等待锁时都运行这个它。
发布文章于
2024-11-15
【PGCCC】Postgresql 文件存储层
在 postgresql 数据库里,数据都会以表的形式组织起来。负责与底层的磁盘交互,就是 postgresql 的文件存储层。
发布文章于
2024-11-13
【PGCCC】Postgresql Toast 原理
上篇博客讲述了 postgresql 如何存储变长数据,它的应用主要是在 toast 。Toast 在存储大型数据时,会将它存储在单独的表中。
发布文章于
2024-11-12
【PGCCC】postgresql 缓存池并发设计
postgresql 对于缓存池的并发控制,比较复杂。下面通过一步步的优化,来讲述 postgresql 的设计思路。它为了提升锁的性能,大量使用了 CAS 操作,只有在操作比较慢的时候,才会加入读写锁。在继续阅读之前,需要熟悉它的存储设计,可以参考这篇文章 {% post_link postgresql-storage-architecture postgresql 存储设计 %} 。首先考虑下单线程的情况,我们先要查找缓存池是否已经包含了要读取的page,如果包含了则直接返回该 buffer。假设现在只有 hash 分区锁,我们写的程序应该是这样的。其中 find_victim_buffer 函数负责挑选出可被替换的 buffer,它的原理是找到 pin count 等于 0 的 buffer。所以这里面会有个问题,当我们查找到数据后,需要及时的 pin 操作,不然有可能会被替换掉,造成读取的数据不是想要的 page number。我们观察上述代码,如果我们没有找到对应的 buffer,那么需要从buffer数组中挑选出一个合适的,这个步骤是很花费时间的。不过这样会遇到一个问题,如下所示
发布文章于
2024-11-08
【PGCCC】Postgresql slru 缓存和存储
简单的 lru 缓存管理,用于持久化数据并且提供 lru 算法来缓存。slru 在 postgresql 存在着多处使用,比如存储事务状态的 clog 日志,就是使用 slru 来管理的。
发布文章于
2024-11-06
【PGCCC】在 Postgres 中创建日期箱的 4 种方法:interval、date_trunc、extract 和 to_char
在这篇文章中,我将介绍一些按日期查询数据的关键函数。有关在 Postgres 中存储日期和时间的最佳方法的摘要.是interval用于修改其他时间的数据类型。
发布文章于
2024-11-05
【PGCCC】Postgresql 缓存池原理
postgresql 为了提高响应速度,在存储层上面添加了一层缓存,这样对于数据的查询和修改,都会先在缓存中操作,后面才会同步到磁盘。
发布文章于
2024-11-04
【PGCCC】Postgresql Checkpoint 原理
postgresql 的 checkpoint 是数据库中非常重要的部分,它涉及到数据库的缓存,持久化与数据恢复各个方面。
发布文章于
2024-10-31
【PGCCC】Postgresql BgWriter 原理
postgresql 有一个后台进程 bgwriter,它会定时刷新缓存到文件系统中。同样它也提高了执行 checkpoint 的完成速度,因为 checkpoint 需要刷新所有的脏页。
发布文章于
2024-10-30
【PGCCC】探索pg-promise:Node.js数据库处理的“PostgreSQL契约大师”
今天我们要聊的是Node.js中一个极具灵活性和强大的数据库处理库——pg-promise。
发布文章于
2024-10-25
PostgreSQL中触发器递归的处理 | 翻译
许多初学者在某个时候都会陷入触发器递归的陷阱。通常,解决方案是完全避免递归。但对于某些用例,您可能必须处理触发器递归。本文将告诉您有关该主题需要了解的内容。如果您曾经被错误消息“超出堆栈深度限制”所困扰,那么这里就是解决方案。触发器是自动更改数据的唯一好方法。约束是确保规则不被违反的“警察”,而触发器是让数据保持一致的工人。理解这一点的初学者可能希望使用触发器来设置updated_at下表中的列:。PL/pgSQL function set_updated_at() line 2 at SQL statement. 错误上下文的最后四行不断重复,并表明存在递归问题。这会再次触发相同的触发器,依此类推,直到堆栈上的递归函数调用过多而超出限制。与大多数其他情况不同,PostgreSQL 的提示在这里毫无用处。由于 PostgreSQL 的多版本实现,每次更新都会产生一个“死元组”,VACUUM稍后必须清理。PostgreSQL 中避免第二次更新和无限递归的正确解决方案是在BEFORE将新行添加到表之前对其进行修改的触发器:。否则,在应用程序之外执行的数据修改可能会破坏数据的完整性。
发布文章于
2024-10-23
信创数据库沙龙-杭州站10月19日报名火热进行中
信创数据库沙龙:
是一个致力于推动数据库技术创新和发展的高端交流平台,旨在增强国内数据库产业的自主可控性和高质量发展。这个平台汇集了学术界和产业界的顶尖专家、学者以及技术爱好者,通过专题演讲、案例分享和技术研讨等丰富多样的活动形式,深入探讨数据库技术的最新应用和发展趋势。
发布文章于
2024-10-15
【PGCCC】在 Postgres 上构建图像搜索引擎#PostgreSQ认证
我最近看到的最有趣的电子商务功能之一是能够搜索与我手机上的图片相似的产品。例如,我可以拍一双鞋或其他产品的照片,然后搜索产品目录以查找类似商品。使用这样的功能可以是一个相当简单的项目,只要有合适的工具。如果我们可以将问题定义为向量搜索问题,那么我们就可以使用 Postgres 来解决它!在这篇博文中,我们将使用Postgres构建一个基本的图像搜索引擎。我们将使用预先训练的模型为图像和文本生成嵌入,然后将这些嵌入存储在 Postgres 中。pgvector扩展将使我们能够使用图像和原始文本作为查询对这些嵌入进行相似性搜索。2021 年,OpenAI 发表了一篇论文和CLIP的模型权重,该模型经过训练可以预测给定图像的最相关文本片段。在本示例中,我们将使用 OpenAI 在 Hugging Face 上提供的开源CLIP模型之一。请注意, CLIP 在生产中的使用存在限制。使用这些模型非常方便,因为它们的接口可在transformers Python 库中找到。我们使用来自Kaggle 的 Amazon Products 数据集。并创建一些辅助函数来加载图像、生成嵌入并将它们插入到 Postgres 中。
发布文章于
2024-10-09
【PGCCC】深入解析 pg_send_execute:异步执行让你“快到飞起”#postgresql认证
在使用PostgreSQL时,我们经常需要提高查询效率,减少延迟。这时候,异步操作就显得至关重要。而在异步操作中,pg_send_execute无疑是一项你不得不了解的黑科技。它是如何让你在预处理语句上“快到飞起”的?让我们从异步执行的角度,一起深度探索这个特性。在PostgreSQL中,pg_send_execute 是用于异步执行已经准备好的SQL预处理语句的API。这意味着,你可以向服务器发送多个预处理的执行请求,而不必等待每个执行结果完成后再发下一个请求。这种异步执行的方式特别适用于高并发、高吞吐量的场景,比如Web服务、大型数据处理任务等。调用 pg_get_result 获取执行结果。而 pg_send_execute允许多个查询并行执行,用户响应时间大幅缩短。通过 pg_send_execute,你可以在一个数据库连接中同时执行多个SQL语句,而不用一个接一个等待执行结束。PostgreSQL培训考试认证中心,国内权威PG培训认证机构,由工业和信息化部教育与考试中心直发证书。
发布文章于
2024-10-08