10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

MySQL Update语句一个非常经典的“坑”

伤感汤姆布利柏

为什么在数学的意义上GraphQL严格的优于REST?

canonical

DDD 低代码 graphql

《Java解惑》PDF

程序员李木子

听GPT 讲Rust源代码--compiler(25)

fliter

Java核心技术·卷I(原书第12版)PDF

程序员李木子

数字化企业与传统企业有何区别?

天津汇柏科技有限公司

企业数字化

《On Java 中文版 基础卷》PDF

程序员李木子

90%企业在探索的敏捷开发怎么做?极狐GitLab总结了这些逻辑与流程

极狐GitLab

业财融合,释放财务更多潜力

智达方通

战略规划 企业战略 业财融合 财务与业务 预算控制

【年后跳槽必看篇】Kafka核心知识点 技术探秘第一章

派大星

Java 面试 kaffa

NineData云原生智能数据管理平台架构

NineData

postgresql 阿里云 生态 polarDB NineData

图像处理-Java-背景色平滑/反色

alexgaoyh

Java 图像处理 背景色平滑 反色

《On Java 中文版 进阶卷》PDF

程序员李木子

Flyway 的主要命令及其作用如下:

虚实的星空

图像处理-Java-去噪/高斯模糊/套红

alexgaoyh

Java 图像处理 去噪 高斯模糊 套红

彰显科技硬实力!天翼云在国际顶刊JoCCASA发表论文

编程猫

用过都说好!FigJam在线白板使用技巧&替代软件推荐!

彭宏豪95

效率工具 在线白板 办公效率 在线协作 boardmix

微服务架构设计模式PDF

程序员李木子

开发者 | Mint Blockchain 重点支持发展的 15 个细分赛道项目

NFT Research

blockchain web3 NFT\

快速玩转 Mixtral 8x7B MOE大模型!阿里云机器学习 PAI 推出最佳实践

阿里云大数据AI技术

左耳听风 - 优质代码「读书打卡 day 11」

Java 工程师蔡姬

读书笔记 程序员 个人成长 职业发展 优质代码

HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用

HarmonyOS开发者

HarmonyOS

听GPT 讲Rust源代码--compiler(26)

fliter

听GPT 讲Rust源代码--compiler(27)

fliter

Java语言程序设计(基础篇 原书第10版)PDF

程序员李木子

论文翻译 | 【深入挖掘Java技术】「底层原理专题」深入分析一下并发编程之父Doug Lea的纽约州立大学的ForkJoin框架的本质和原理

码界西柚

Java 并发编程 后端技术 2024年第十五篇文章 Doug Lea

求求你别用轮询了!手把手教你封装WebSocket消息推送,告别轮询方式!

陇锦

JavaScript 前端 websocket

鸿蒙生态进入第二阶段,加速千行百业应用鸿蒙化

华为云开发者联盟

华为 鸿蒙 开发者 华为云开发者联盟

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