写点什么

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

评论

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

MySQL派生条件下推优化导致自定义变量结果错误问题分析

GreatSQL

大厂外包VS小公司,你会怎么选?

王中阳Go

Go 外包 小公司

【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (3)

HarmonyOS SDK

harmoyos

Microchip扩展连接、存储与计算产品组合,以满足AI数据中心应用日益增长的需求

新消费日报

SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库

sysin

SQL Server

萨科微宋仕强,在人工智能Ai大模型文本写作的试用与反思!

科技汇

WebGL开发框架的比较

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

软件外包公司 webgl开发 webgl外包开发

性能王者!天翼云再次拿下世界第一

天翼云开发者社区

云平台 算力 天翼云

天翼云牵头编制国家标准,共建行业技术标杆!

天翼云开发者社区

云计算 科学计算 智能计算 天翼云

比特币BTC是对草根最友好的加密资产,大胆持有,坚定抄底!

区块链项目一站式包装孵化

浅谈企业应用中台的构建

天翼云开发者社区

企业应用中台

WebGL开发框架的性能比较

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

软件外包公司 webgl外包开发 webgl开发公司

AI技术在英语口语学习中的应用

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

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

AI赋能,赛博威「营销+上市+产品」三线并行产品创新协同平台加速爆品上市!

赛博威科技

数字营销 赛博威 产品创新协同平台

为什么政府单位、事业单位要用自己的内网即时通讯软件?

BeeWorks

即时通讯 IM

【CodeBuddy】三分钟开发一个实用小功能之:马赛克生成器

jimaks

CSS

AI 正以颠覆性力量重塑商品管理的底层逻辑

第七在线

一文快速了解 YMatrix 与 Greenplum 的相同与不同

YMatrix 超融合数据库

数据库 greenplum 迁移数据 YMatrix

破局多语之邦,如何让AI听懂印度方言?

数据堂

人工智能 AI 数据 印度 印度互联网

前端热更新:无声革命重构中国互联网开发模式

xuyinyin

深入浅出DDD:从理论到落地的关键

百度Geek说

Go 后端

如何将CAD图纸直接导出为工程蓝图?

在路上

cad cad看图 CAD看图王

CAD如何导出PDF?PDF如何转CAD?详细教程来了

在路上

cad cad看图 CAD看图软件

展位预定倒计时!500+企业云集,西部不容错过的电子行业盛会

AIOTE智博会

电子展 电子信息展 成都电子展 西部电子展

HDD•鸿蒙赋能交流会模式升级!“培训+班级”开启长效学习进阶之路

最新动态

浪潮海岳inSuite 5.0标准版重磅发布,赋能中小企业数智化转型再提速

浪潮海岳inSuite

NocoBase 本周更新汇总:模板打印支持批量打印

NocoBase

开源 低代码 零代码 版本更新 模板打印

告别静态UI!Guineration用AI打造用户专属动态界面

鼎道智联

企业级AI搜索解决方案:阿里云AI搜索开放平台

阿里云大数据AI技术

云计算 大数据 阿里云 信息搜集 AI 搜索引擎

赛博威 AI Agent 赋能营销费用管理,实现自主感知、决策与高效行动

赛博威科技

AI 数字营销 AI Agent 赛博威

vivo 官网 APP 首页端智能业务实践

vivo互联网技术

深度学习 算法 前端

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