AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

评论

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

一次 sysbench 长稳测试过程中连接中断的问题分析排查

TiDB 社区干货传送门

故障排查/诊断

运维安全审计以及运维安全审计软件定义看这里!

行云管家

安全运维 运维安全 运维安全审计

ChatGPT4o 如何速写论文

蓉蓉

gpt4o

贝锐蒲公英智能选路:跨地区远程访问更快、更稳、更可靠

贝锐

远程办公 SD-WAN 智能选路 异地组网

【程序大侠传】全局变量与并发之战

Disaster

观测云:企业级监控的全方位解决方案

可观测技术

监控

为什么企业需要IT外包服务

Ogcloud

IT外包 IT外包公司 IT外包服务 IT外包企业

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.6版已发布

JackJiang

即时通讯;IM;网络编程

观测云:零售行业数据分析的利器

可观测技术

写一篇最近用DM的总结

TiDB 社区干货传送门

迁移

Dashboard 热力图显示不准? 如何定位热点相关sql ?

TiDB 社区干货传送门

故障排查/诊断

sync_diff_inspector 表结构比较功能探索

TiDB 社区干货传送门

迁移

一文了解 PingCAP Clinic 诊断服务

TiDB 社区干货传送门

故障排查/诊断

以用户为中心:观测云的设计理念

可观测技术

监控

京东商品列表数据接口:电商数据分析的利器

tbapi

京东API 京东商品列表数据接口 京东商品数据采集

探讨大模型前沿技术与商业化落地 |【奇绩潜空间】第3季开始报名

奇绩创坛

人工智能 机器学习 深度学习 大模型 视频生成

在 K8s 上用 KubeBlocks 提供的 PG 和 Redis operator 部署高可用 Harbor 集群

小猿姐

postgresql Kubernetes operator Redis 消费队列

24年黑龙江正规等保测评机构名单汇总

行云管家

等保 堡垒机 等保测评 黑龙江

Web网页端IM产品RainbowChat-Web的v7.1版已发布

JackJiang

即时通讯 即时通讯;IM;网络编程

焱融科技发布国产化全闪新品 F8000XC

焱融科技

从"小白"到"大白":我的TiDB一周年成长记录

TiDB 社区干货传送门

TikTok批量养号方法

Ogcloud

云手机 海外云手机 tiktok云手机 tiktok运营 TikTok养号

夏日清凉计划开启,来华为天气领取出行礼包、影音会员等惊喜福利

最新动态

【论文速读】| Arondight:使用自动生成的多模态越狱提示对大型视觉语言模型进行红队测试

云起无垠

深入解析仓颉编程语言:函数式编程的核心特性

代码忍者

仓颉

【第八届 TiDB Hackathon】AI 创新应用 TiDB 黑客马拉松正式开启,一起来用 TiDB 构建未来的 AI 创新应用, 瓜分超 ¥210,000 奖金池!

TiDB 社区干货传送门

一次 sysbench 长稳测试过程中锁丢失导致事务提交失败的问题分析排查

TiDB 社区干货传送门

故障排查/诊断

【YashanDB知识库】服务端是GBK编码,导致从22.2.12.100升级到22.2.13.100失败问题

YashanDB

yashandb 崖山数据库 崖山DB

淘宝商品详情API:商品规格参数的详细解析

技术冰糖葫芦

API Explorer API 编排 api 货币化 API 文档

【故障处理】 统计信息收集失败, enconding failed

TiDB 社区干货传送门

故障排查/诊断

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