写点什么

PostgreSQL 14 会破坏其官方的.NET 和 Java 驱动

  • 2022-07-06
  • 本文字数:1037 字

    阅读完需:约 3 分钟

PostgreSQL 14会破坏其官方的.NET和Java驱动

PostgreSQL 14 中的新语法,尤其是使用BEGIN ATOMIC ... END创建 SQL 函数,在某些情况下会破坏其官方的.NET 和 Java 数据库驱动。但只要不通过NpgsqlPgJDBC修改数据库模式,就不会出现问题。


对于 Java 的 JDBC 和.NET 的 ADO.NET 数据库驱动框架,它们存在一个共同点,那就是都支持使用分号实现 SQL 语句批处理。批处理对提高性能是十分必要的。如果客户端一次只发送一个命令,那么每个命令就必须要付出通信延迟代价。但如果使用批处理一次执行一批语句,那么只需付出一次通信代价。


事实上,SQL Server 等数据库将批处理语句作为一个庞大的 SQL 字符串整体发送。但 PostgreSQL 的 wire 通信协议工作机制有别如此。虽然批处理语句依然整体发送,但客户端需将语句拆分为各条独立的命令。

原始实现可简单地假设每个分号标识一条语句的终止处。当然,分号也可能是一条语句字符串中的内容,而非一条语句的结尾。Npgsql 和 PgJDBC 解析器对此做了考虑。


这曾经工作得很好。但现在新建 SQL 函数体中可以定义多条语句,那么应如何处理?当然这也不是问题,因为函数体使用“$...$”标记做转义。在“$...$”标记对内的分号,与其它字符串文字的处理方式无异。


进而 PostgreSQL 14 添加了称为“SQL 标准语法”的“BEGIN ATOMIC ... END”语句。对此发行说明中给出如下解释。


使用 SQL 标准语法编写的函数或过程能快速解析,并存储为解析树形式。这可更好地追踪函数的依赖关系,并具有更好的安全性。


由于分号可能并非出现在引号引起的字符串中,而是会出现在BEGIN ATOMIC ... END语句块内的任何位置,如果解析器使用当前的方法,就无法确定批处理中语句的拆分位置。完全支持语句拆分或是要去更改 API,或是要去新建一个更复杂的解析器。


Npgsql 已关注当前解析器的开销问题,决定更改 API。在 Npgsql 的库中增加了一种称为“原始SQL(raw SQL mode)”的模式。此模式没有使用命名参数,需要使用位置(positional)参数。


而 PgJDBC 团队尚未决定采用何种方法。其进展可关注软件缺陷报告“新的PG14 SQL标准函数破坏了PgJDBC解析器(New PG14 SQL-standard function bodies break our SQL parser)”。


作者简介:

Jonathan Allen 在上世纪 90 年代后期为一家健康诊所实施 MIS 项目,实现从 Access 和 Excel 逐步升级为企业解决方案。在金融部门编写五年自动交易系统后,他成为多个项目的顾问,其中包括机器人仓库 UI、癌症研究软件中间层,以及解决一家大型房地产保险公司的大数据需求。在空闲时间,他喜欢研习 16 世纪的武术。


原文链接:

PostgreSQL 14 Breaks the .NET and Java Drivers for PostgreSQL

2022-07-06 16:1615151

评论

发布
暂无评论
发现更多内容

火山引擎引领“AI+视频云”融合创新,开启智能视频新时代

新消费日报

启动!广西农垦集团基于用友BIP推进财务数智化升级

用友BIP

用户反馈如何帮助企业实现降本增效?

Feedalyze

效率工具 产品经理 用户体验 产品运营 用户反馈

详解鸿蒙仓颉开发语言中的日志打印问题

幽蓝计划

游戏盾功能与技术解析

网络安全服务

游戏开发 服务器 手游 DDoS 攻击 游戏盾

淘宝图片搜索API秘籍!轻松获取相似商品数据

tbapi

淘宝API 淘宝图片搜索接口 淘宝图片搜索API 天猫图片搜索接口 淘宝图片api

年会抽奖不求人:用 CodeBuddy 快速打造炫酷抽奖助手,老板直呼专业!

不惑

CodeBuddy

HarmonyOS5云服务技术分享--认证文档问题

莓创技术

火山引擎发布豆包·语音播客模型,秒级生成“真人对话”播客

新消费日报

Solana 上的Vibe Coding(氛围式编程)正崛起

PowerVerse

AI web3 DePIN

DApp开发的主要框架

北京木奇移动技术有限公司

dapp开发 区块链开发 软件外包公司

CST软件的IC封装的RLC提取以及等效电路

思茂信息

cst CST软件 CST Studio Suite

区块链DApp的开发技术方案

北京木奇移动技术有限公司

dapp开发 区块链开发 软件外包公司

DApp开发的技术架构

北京木奇移动技术有限公司

dapp开发 区块链开发 软件外包公司

启动!福建盐业选择用友BIP升级智慧财务体系

用友BIP

高敏感数据行业怎么定义?需要用到堡垒机吗?

行云管家

网络安全 堡垒机 高敏感数据

Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持

Apache Flink

大数据 flink Flink CDC

《算法导论(第4版)》阅读笔记:p95-p100

codists

算法

融云 uni-app IMKit 上线,1 天集成,多端畅行

融云 RongCloud

AI口语练习 App 的技术方案

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

AI生成功能设计用例|得物技术

得物技术

AIGC

MRP都搞不好,何谈生产管理过关!

积木链小链

数字化转型 智能制造 生产管理

如何基于ThinkPHP快速搭建婚恋交友小程序?相亲婚恋app源码架构详解

DUOKE七七

乘云数字荣获“鑫智奖·2025专家推荐TOP10优秀解决方案”奖项

乘云数字DataBuff

数字化转型 故障定位 金融数字化 业务监控

华为邀您相聚KubeCon China 2025,共绘云原生新一个十年

华为云原生团队

云计算 容器 云原生

AI 大模型入门 四:检索增强生成(RAG),自动生成精准用例!

测试人

软件测试

淘宝商品列表API接口攻略(附代码示例)

tbapi

淘宝API接口 天猫API接口 淘宝商品列表接口 天猫商品列表接口

联通智家通通:聚四方守护之力,筑万家AI通途

脑极体

AI

信创堡垒机助力政企IT系统实现IT运维国产化

行云管家

数字化 信创 堡垒机

深化合作!港华集团数智升级,构建一体化管控平台

用友BIP

反而是一个一个的客户教会了我如何接单

程序员郭顺发

PostgreSQL 14会破坏其官方的.NET和Java驱动_数据库_Jonathan Allen_InfoQ精选文章