发布时间:2026/8/26 17:10:07
12.JSONB全文检索与事务PostgreSQL适合哪些AI业务数据 JSONB、全文检索与事务PostgreSQL 适合哪些 AI 业务数据码海寻道 · 大模型、智能体与 RAG 工程组件系列第 12 篇PostgreSQL 在 AI 项目中的价值往往不只来自“它是一个关系数据库”还来自三个很实用的能力组合JSONB保存结构变化较快的半结构化数据全文检索在不接入向量模型时完成词项检索事务与并发控制保证业务状态可靠变化。这三项能力刚好对应大模型应用中大量真实问题工具参数和模型输出结构变化、知识库关键词检索、文档发布和任务状态的一致性。实际使用时三种能力应分别看待JSONB 解决结构变化全文检索解决词项匹配事务解决状态变化。它们可以出现在同一张表中但不意味着所有数据都应该塞进一个 JSONB 字段也不意味着全文检索可以替代语义检索。一、JSONB 适合保存什么JSONB 是 PostgreSQL 中以二进制形式保存 JSON 数据的类型适合保存结构不完全固定、需要查询或建立索引的扩展信息。AI 应用中的典型 JSONB 数据包括模型调用的请求参数工具调用参数和返回摘要RAG 检索详情文档解析出的表格或版面信息不同模型返回的可变评测结果Agent 节点的扩展状态。例如CREATETABLEllm_runs(id BIGSERIALPRIMARYKEY,request_idTEXTNOTNULL,model_nameTEXTNOTNULL,input_tokensINTEGER,output_tokensINTEGER,metadata JSONBNOTNULLDEFAULT{}::jsonb,created_at TIMESTAMPTZNOTNULLDEFAULTnow());INSERTINTOllm_runs(request_id,model_name,metadata)VALUES(req_001,example-model,{ route: knowledge_qa, retrieval: {top_k: 20, rerank_top_n: 5}, tools: [query_order] }::jsonb);二、JSONB 不应该替代稳定关系字段如果tenant_id、user_id、status和created_at是每次查询都会用到的核心字段就不应该全部藏在 JSONB 里。推荐的方式是稳定、常查询、需要约束的字段 → 普通列 结构变化快、可选、扩展性的字段 → JSONB例如CREATETABLEtool_calls(id BIGSERIALPRIMARYKEY,tenant_id UUIDNOTNULL,user_id UUIDNOTNULL,tool_nameTEXTNOTNULL,statusTEXTNOTNULL,arguments JSONBNOTNULL,result JSONB,created_at TIMESTAMPTZNOTNULLDEFAULTnow());这里的租户、用户、工具名和状态是关系列具体参数和结果则适合用 JSONB 保存。三、JSONB 如何查询PostgreSQL 支持多种 JSON/JSONB 操作符-- 获取字段SELECTmetadata-retrievalASretrievalFROMllm_runs;-- 获取文本值SELECTmetadata-routeASrouteFROMllm_runs;-- 判断 JSON 是否包含某个结构SELECT*FROMllm_runsWHEREmetadata {route: knowledge_qa}::jsonb;对于经常使用包含查询的 JSONB 字段可以考虑 GIN 索引CREATEINDEXidx_llm_runs_metadataONllm_runsUSINGGIN(metadata);索引不是越多越好。JSONB 数据结构复杂、字段分布不稳定时应该用EXPLAIN (ANALYZE, BUFFERS)验证索引是否真的被使用。四、全文检索解决什么问题全文检索适合在文档中查找词项、词组和文本相关性不需要先调用 Embedding 模型。它适合错误码产品型号订单号前缀规章制度关键词代码符号精确词语和短语。PostgreSQL 使用tsvector表示规范化后的文本搜索数据使用tsquery表示搜索条件。一个最小示例CREATETABLEknowledge_chunks(id BIGSERIALPRIMARYKEY,contentTEXTNOTNULL,search_vector TSVECTOR);UPDATEknowledge_chunksSETsearch_vectorto_tsvector(simple,content);CREATEINDEXidx_knowledge_chunks_searchONknowledge_chunksUSINGGIN(search_vector);SELECTid,contentFROMknowledge_chunksWHEREsearch_vector plainto_tsquery(simple,年休假 申请);实际中文分词和词法归一化要结合配置和扩展评估。不要把英文配置直接当成中文检索方案。五、用生成列保持全文检索字段同步如果每次更新内容都手动更新search_vector容易出现遗漏。可以使用生成列或触发器让全文检索字段随原文变化。需要注意生成列、触发器和异步索引任务的边界原文更新后数据库内的tsvector可以同步更新但 Embedding、Milvus/pgvector 向量和 Reranker 评测仍然需要异步处理。不要把耗时的模型调用放进数据库触发器否则一次普通 UPDATE 可能变成长时间阻塞。示意CREATETABLEarticles(id BIGSERIALPRIMARYKEY,titleTEXTNOTNULL,bodyTEXTNOTNULL,search_vector TSVECTOR GENERATED ALWAYSAS(to_tsvector(simple,coalesce(title,)|| ||coalesce(body,)))STORED);CREATEINDEXidx_articles_searchONarticlesUSINGGIN(search_vector);是否使用生成列要根据 PostgreSQL 版本、配置和文本处理需求验证。复杂的中文分词、清洗和多字段权重可能需要在应用层预处理或使用专门方案。六、全文检索和向量检索不是二选一两者关注的信号不同全文检索关键词、词项、短语、编号 向量检索语义、概念、表达差异例如问题PostgreSQL 16 中 JSONB 索引失效怎么办向量检索可以理解“JSONB 索引失效”的整体问题全文检索则能准确匹配“PostgreSQL 16”和“JSONB”。实际 RAG 往往采用全文召回 向量召回 ↓ 合并、去重、重排序 ↓ 交给大模型七、事务为什么对 AI 应用重要很多人以为模型调用都是“读数据”不需要事务。实际上知识库发布、文档删除、任务状态、用户配额、反馈记录和工具操作都可能需要一致性。例如发布文档时可能要同时完成更新文档版本 创建索引任务 标记旧版本归档 记录审计事件如果更新文档成功但索引任务创建失败系统可能显示“已发布”检索却仍然使用旧数据。可以用事务保护数据库内部的状态变化事务只适合保护 PostgreSQL 内部的多个状态变化不会自动把 PostgreSQL、对象存储、向量库和消息队列变成一个分布式事务。跨系统流程应使用状态机、Outbox、幂等键和补偿任务。事务保存文档版本 写入 outbox 事件 提交 Worker读取事件更新 Embedding/向量索引 失败记录重试次数和错误继续补偿 成功更新索引状态为 readyBEGIN;UPDATEdocumentsSETcurrent_version3,statusindexingWHEREid00000000-0000-0000-0000-000000000001;INSERTINTOingestion_jobs(id,document_id,job_type,status)VALUES(gen_random_uuid(),00000000-0000-0000-0000-000000000001,rebuild_embedding,pending);COMMIT;注意事务只能保证同一个数据库内的原子性。PostgreSQL 成功提交并不代表 Milvus、对象存储和消息队列已经同时成功。跨系统一致性需要事件、补偿、幂等和状态机设计。八、事务隔离与并发更新PostgreSQL 使用多版本并发控制等机制处理多个会话同时读写数据的情况。AI 应用中的典型并发问题包括两个 Worker 同时处理同一个文档用户重复提交同一个任务两个 Agent 请求同时修改同一业务对象文档发布和删除同时发生。解决方法可能包括唯一约束和幂等键行级锁SELECT ... FOR UPDATE乐观锁版本号SERIALIZABLE或适当的事务隔离级别失败重试和补偿任务。具体方案要根据冲突概率和业务代价选择。事务隔离级别越严格不一定越适合所有高并发任务。九、AI 数据表的一个组合示例CREATETABLEknowledge_documents(id UUIDPRIMARYKEY,tenant_id UUIDNOTNULL,titleTEXTNOTNULL,contentTEXTNOTNULL,statusTEXTNOTNULL,metadata JSONBNOTNULLDEFAULT{}::jsonb,search_vector TSVECTOR GENERATED ALWAYSAS(to_tsvector(simple,coalesce(title,)|| ||coalesce(content,)))STORED,created_at TIMESTAMPTZNOTNULLDEFAULTnow());CREATEINDEXidx_docs_tenant_statusONknowledge_documents(tenant_id,status);CREATEINDEXidx_docs_metadataONknowledge_documentsUSINGGIN(metadata);CREATEINDEXidx_docs_searchONknowledge_documentsUSINGGIN(search_vector);这个表可以用于轻量级文档管理和全文检索。向量检索是否放在同一张表中要等到 pgvector 文章中结合规模和查询模式讨论。十、哪些 AI 业务数据适合 PostgreSQL非常适合用户、组织、租户和权限文档、版本、来源和发布状态会话、消息、反馈和引用任务、重试、错误和审计模型调用统计和预算工具定义与调用记录需要事务的订单、审批和业务对象。适合但需要设计JSONB 形式的模型输出文档解析结构大量聊天历史全文索引pgvector 向量。通常不建议直接承担大量原始图片、视频和大型附件需要独立水平扩展的大规模向量检索高吞吐消息分发不经权限控制的任意 Agent SQL。十一、JSONB、全文检索和事务的边界三种能力不能解决所有问题JSONB → 解决结构扩展不解决业务建模 全文检索 → 解决词项检索不等于语义检索 事务 → 解决数据库内一致性不自动解决跨系统一致性把边界理解清楚才能避免“一个功能解决全部问题”的误用。十二、上线前检查清单稳定业务字段没有全部塞进 JSONBJSONB 查询字段有实际执行计划验证全文检索配置与语言、分词需求匹配文本更新时搜索字段保持同步文档发布和任务创建有事务保护跨 PostgreSQL、向量库、对象存储的流程可补偿Worker 具备幂等和并发控制会话和调用日志有归档与脱敏策略权限过滤不依赖自然语言提示高风险写操作有审计和人工确认。没有在数据库事务或触发器中同步调用模型 API跨 PostgreSQL、对象存储和向量库的流程有 Outbox、幂等和补偿JSONB、全文检索和向量字段分别有更新与重建策略结语PostgreSQL 的强项是把变化纳入秩序JSONB 给了 AI 应用必要的灵活性全文检索提供了不依赖向量模型的词项检索事务和并发控制则让文档、任务和业务状态能够可靠变化。它们组合起来正好适合承载 AI 应用中“既有结构化事实又有半结构化模型数据”的部分。下一篇进入向量能力《pgvector 入门用 PostgreSQL 直接实现向量检索》参考资料PostgreSQL DocumentationJSON Functions and OperatorsPostgreSQL DocumentationText Search Functions and OperatorsPostgreSQL DocumentationConcurrency ControlPostgreSQL DocumentationRow Security PoliciesPostgreSQL DocumentationTransactions and Identifiers本文为“码海寻道”原创技术文章。SQL、索引和事务行为应以实际 PostgreSQL 版本、配置和执行计划为准。

相关新闻

2026/8/26 17:10:07

工商业储能系列:BMS电池均衡技术路线

前言 本文旨在系统阐述电池管理系统(BMS)中两大核心均衡技术路线——被动均衡与主动均衡的原理、架构与工程选型依据。 在工商业储能系统中,电芯一致性问题是决定系统安全、效率与全生命周期收益的核心挑战。先天制造差异(内因&…

2026/8/26 17:10:07

从零拿捏Linux(一) ---- 命令(视频秒解)

🌟作者介绍:友友们好我是钓鱼的猫猫,可以叫我小猫💕 ⏳作者主页:钓鱼的猫猫-CSDN博客🎉 👀项目专栏:linux_钓鱼的小小猫的博客-CSDN博客 🎉Gitee:袁浩然 (rai…

2026/8/26 17:05:06

飞书 CLI 联动 Codex,从需求文档到代码的端到端自动化

从飞书文档到可运行代码:Codex 自动化流水线实战 在传统开发流程中,需求从产品经理的飞书文档流转到开发者的 IDE,往往伴随着大量的人工转录工作。复制粘贴需求细节、手动拆解任务、再逐行编写代码,这个过程不仅耗时,还…

2026/8/26 18:05:17

IMX6ULL MfgTool软件烧写系统

一、编译uboot #!/bin/bash make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig make V1 ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j12 cp u-boot.imx ../u-boot-imx6ull14x14ev…

2026/8/26 18:05:17

008-瓶间差分析

瓶间差分析 分析目的 瓶间差(bottle-to-bottle variability)评价同一产品不同瓶(或不同批次)之间测量结果的差异。分析通常分两步:先用 bottle_anova() 检验各瓶(或批次) 均值是否有统计学差异&…

2026/8/26 18:05:17

007-分析灵敏度

分析灵敏度 分析目的 分析灵敏度(analytical sensitivity)描述测量系统在低浓度端区分"信号与噪声"的能力,由三个递进的 限值构成: LoB(Limit of Blank,空白限):空白样本可…

2026/8/26 18:05:17

掌握 GPT-5.6 这三个技巧,快速搞定顶刊精读,科研效率翻倍!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 在学术研究中,读文献常常会遇到两类困扰。要么就是投入大量时间精…

2026/8/26 18:00:17

SparkStreaming 之 foreachRDD 算子详解及代码实现

摘要:foreachRDD 是 Spark Streaming 里最常用、也最容易写挂的输出算子。这篇讲清它和 transform 的区别——foreachRDD 在 Driver 端拿到 RDD、真正执行在 Executor 端,以及由此带来的一个高频坑:连接到底该建在哪。用三种连接方式的性能对…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…