写点什么

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

评论

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

功能强大的字幕编辑工具TunesKit Subtitle Editor for Mac

Mac相关知识分享

5gWiFi IPQ6010 vs. IPQ5010 Battle of the WiFi 6 Titans:  - Which One Should You Choose?

wifi6-yiyi

5G wifi

飞码LowCode前端技术(六)

京东科技开发者

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

HarmonyOS SDK

HarmonyOS

人工智能 | 阿里通义千问大模型

测试人

人工智能 软件测试

Bitmap 和 布隆过滤器傻傻分不清?你这不应该啊

程序员小富

Java redis 面试 布隆过滤器

TunesKit iPhone Unlocker for Mac(iPhone设备解锁工具)

Mac相关知识分享

儋州市等保测评机构有哪些?在哪里?

行云管家

等保 等保测评机构 澶州

【CST教程】如何在CST中设置自由边界

思茂信息

cst 电磁仿真 边界条件

情绪稳定!别再让Git合并冲突影响你工作了

禅道项目管理

程序员 代码管理 git 学习 Git Commit git push

基智科技CEO张文战:探索火山引擎数据飞轮模式下的大模型应用新机会

字节跳动数据平台

大数据 大模型

单色相机的原始文件转换为 DNG 格式LibRaw Monochrome2DNG for Mac

Mac相关知识分享

飞码LowCode前端技术(五)

京东科技开发者

2025云堡垒机公司就选行云绽放!

行云管家

云计算 网络安全 云堡垒机

捷途山海 T2—— 安全堡垒,护航人生

科技热闻

华为云开源引领,KubeEdge晋级CNCF毕业项目

华为云原生团队

云计算 容器 云原生 kubeedge

FastRawViewer for mac(Raw查看器)

Mac相关知识分享

Perfectly Clear Video for Mac(AI视频增强工具)

Mac相关知识分享

喜讯|麦杰科技入选首批《上海市重点产业和领域数字化产品和解决方案推荐目录》

麦杰研究院

修复损坏视频的理想选择TunesKit Video Repair for mac视频修复工具

Mac相关知识分享

视频修复

人工智能 | 阿里通义千问大模型

测吧(北京)科技有限公司

测试

测试热招职位技能要求拆解公开课 —— 开启你的软件测试进阶之路

测吧(北京)科技有限公司

测试

Java 如何确保 JS 不被缓存

威哥爱编程

js Java’

商品详情数据API接口详解与数据应用参考

代码忍者

pinduoduo API API 性能测试

研发效能中的黄金三角与瓶颈突围

思码逸研发效能

研发效能 绩效 绩效管理 效能度量 绩效分析

“特斯拉式”创新,被这家科技卫浴品牌极致演绎

Alter

飞码LowCode前端技术(七)

京东科技开发者

实用便捷的音频录制工具TunesKit Audio Capture for mac

Mac相关知识分享

修复各种 iOS 设备TunesKit iOS System Recovery

Mac相关知识分享

功能强大的视频剪切工具TunesKit Video Cutter for mac(视频分割编辑

Mac相关知识分享

携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议

ModelWhale

人工智能 大模型 学科建设 创新人才

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