写点什么

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:1614905

评论

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

ARTS 打卡第 2 周: 对比法在编程上的具体应用

前行

【高危】致远A8前台上传解压漏洞 (MPS-6tdh-8qpu)

墨菲安全

网络安全 漏洞 致远

火山引擎云调度GTM“同城容灾”与“异地多活”实践

火山引擎边缘云

容灾 容灾备份 容灾多活

服务质量不能掉链子,中小企业采购云服务器为何更要选择大厂?

YG科技

金融场景的“四边形战士”,容联云赤兔大模型向行业飞驰

脑极体

金融 AI大模型

R语言之数据导出

timerring

R 语言

Java函数式编程 :为什么要关心Java8

java易二三

Java 编程 程序员 计算机 科技

企业新业务拓展,云耀云服务器L实例能否助其进行快速开发

YG科技

电商秒杀系统架构设计

艾瑾行

架构训练营

AI+SaaS,会是微盟们的新法器吗?

自象限

制造业为什么要数字化?

优秀

制造业数字化

精彩回顾 | CommunityOverCode Asia 圆满落幕

Apache IoTDB

快速构建商业模式,企业在云服务器选购上有什么需要注意的?

轶天下事

【高危】WPS Office 远程代码执行漏洞(WPSSRC-2023-0701绕过) (MPS-qjky-hw9x)

墨菲安全

网络安全 漏洞 WPS Office

代码随想录Day50 - 动态规划(十一)

jjn0703

安卓设备文件传输 MacDroid pro for mac激活中文

胖墩儿不胖y

文件传输 Mac 软件 传输文件

领域驱动设计(DDD): 三层架构到DDD架构演化

付威

领域驱动设计

采购云服务器安全与成本不可兼得?云耀云服务器L或许可以了解一下

轶天下事

连接未来 驱动创新|腾讯云 CODING DevOps 主题沙龙诚邀您的参与

CODING DevOps

Presto 设计与实现(七):Event

冰心的小屋

数据湖 Event presto presto 设计与实现

谁能代表中国软件的未来

B Impact

对话无服务器专家 Luca Mezzalira:你真的为 Serverless × AI 做好准备了吗?

亚马逊云科技 (Amazon Web Services)

Java 人工智能

Java仿抽奖系统

java易二三

Java 编程 程序员 计算机

对 JDK8 新出的Optional类的探索与思考

emanjusaka

Java jdk 后端

CloudEon入选开源中国最有价值开源项目(GVP)

CloudEon开源

中小企业建站,采购云服务器上需注意什么?

YG科技

ARTS 打卡第 13 天

自由

ARTS 打卡计划

C++函数重载

芯动大师

低代码开发平台能开发什么类型的系统和软件?

优秀

低代码开发平台

AIGC如何借AI Agent落地?TARS-RPA-Agent破解RPA与LLM融合难题

王吉伟频道

RPA AIGC autogpt AI大语言模型 AI Agent

初创公司预算有限,在云服务器选择上应该如何选择?

YG科技

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