写点什么

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

评论

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

网络安全里的主要岗位有哪些?小白如何快速入门?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

我为什么觉得数字中台是团队的新型基础设施

软件工程师-罗小东

基于ebpf的parca-agent profiling方案探究

jupiter

ebpf profiling parca

ehviewer苹果下载版本2023最新版本

ehviewer

EhViewer

JDK源码怎么学?看这篇文章就够了!

Java永远的神

Java 程序员 多线程 jdk源码 架构师

2023最新最全的Java面试八股文小抄开源!带你摸熟 20+ 互联网公司面试考点

采菊东篱下

Java 面试

与众不同的夜间开关交互效果

南城FE

CSS 前端 动画 交互设计 开关

推荐系统系列之推荐系统概览(下)

亚马逊云科技 (Amazon Web Services)

机器学习

OKX和UniSat联手革新比特币区块链上的BRC-20

币离海

神界原罪2游戏下载|DLC终极版|Mac游戏专区

Rose

神界:原罪2 神界原罪 Mac游戏 神界原罪 破解版下载

Mac强大音频采样器Kontakt 7 激活版

Rose

mac音频采样器 Kontakt 7激活版 Native Instruments Kontakt 7 mac下载

Mac平台上的条形码生成工具分享~

真大的脸盆

Mac Mac 软件 条形码生成工具 条形码软件

520用项目管理思维来过,相当炸裂!

禅道项目管理

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

福大大架构师每日一题

福大大 文心一言 讯飞星火

Create Vite App 支持 OpenTiny 啦🎉

Kagol

获权威机构Gartner认可,瓴羊Quick BI连续四年入选魔力象限ABI报告

夜雨微澜

Java 创建一个大文件

HoneyMoose

魔兽争霸3冰封王座中文下载_冰封王座 mac下载_解除8M地图限制

Rose

魔兽争霸3 冰封王座 Warcraft III Mac游戏下载

原生Mac视频下载器Downie4许可证下载v4.6.17

Rose

Mac 视频下载工具 Downie 4 下载 Downie4许可证 Downie 4 Mac版 Downie 4中文版

Exposure X7 Bundle下载|专业的照片处理插件套装

Rose

滤镜插件 Exposure X7 Bundle下载 Exposure X7中文版

PoseiSwap以2500万美元估值,再获新一轮融资

西柚子

瓴羊Quick BI、帆软finebi等助力中国企业加速BI国产化替代进程

对不起该用户已成仙‖

Django笔记三十二之session登录验证操作

Hunter熊

Python django session session管理 登录操作

PoseiSwap以2500万美元估值,再获新一轮融资

鳄鱼视界

2023-05-19:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,每个 station[i] 代表一个加油站, 它位于出发位置东面 station[i][

福大大架构师每日一题

Go 算法 rust 福大大

PoseiSwap以2500万美元估值,再获新一轮融资

股市老人

数字化转型应该如何去做?(历史篇)

数字随行

数字化转型

IDO 前瞻,Vimverse 生态如何推动 DeFi 的深度革新?

股市老人

单例模式:确保一个类只有一个实例,提高程序的可维护性和可扩展性

Jack

华东手机银行用户经营洞察2023

易观分析

金融 手机银行

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