50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

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

云数据库技术沙龙|多云多源下的数据复制技术解读-NineData

NineData

MySQL Clickhouse 数据管理 多云多源 数据存取

在Bamboo上怎么使用iOS的单元测试 | 京东云技术团队

京东科技开发者

ios 单元测试 代码覆盖率 Bamboo 企业号 5 月 PK 榜

MySQL百万数据深度分页优化思路分析

Java你猿哥

Java MySQL 数据库 ssm 优化技术

AI 大底座,大模型时代的答卷

百度Geek说

人工智能 百度 文心一言 企业号 5 月 PK 榜

零信任是什么意思?与堡垒机有什么区别?

行云管家

网络安全 堡垒机 零信任

如何选择正确的压缩方式?

ScaleFlux

智能硬件 数据压缩 计算存储 NVMeSSD

基于图神经网络的推荐算法

TiAmo

神经网络 算法 推荐算法

责任链模式在复杂数据处理场景中的实战

阿里技术

设计模式 技术实践

Webpack5构建性能优化:构建耗时从150s到60s再到10s | 京东云技术团队

京东科技开发者

性能优化 webpack webpack-tapable 企业号 5 月 PK 榜

流批一体数据交换引擎解决方案

weigeonlyyou

物联网 数据迁移 ETL系统 Kafka ETL 流批一体化

抬杠小能手GPT

林十二XII

一周吃透Java面试八股文(2023最新整理)

Java你猿哥

Java kafka Spring Boot JVM java面试

震撼来袭!最具中国特色的微服务组件:新一代SpringCloud Alibaba

Java 架构 微服务 Spring Cloud spring cloud alibaba

如何选择最优权限框架?Sa-Token 和 Shiro 对比

shiro Sa-Token

开源之夏 2023 | 与 Databend 一同探索云数仓的魅力

Databend

构建万物互联,华为云IoT+鸿蒙重燃物体感知

华为云开发者联盟

鸿蒙 物联网 华为云 华为云开发者联盟 企业号 5 月 PK 榜

硬核!阿里最新出品架构核心场景实战手册,解决99%的架构问题

Java你猿哥

微服务 架构设计 架构师 架构场景实战 微服务实战

重磅发布!阿里巴巴专家亲自撰写,Dubbo 3.0 分布式实战(彩印版)

Java 分布式 微服务 dubbo

阿里全新推出:微服务突击手册,把所有操作都写出来了|超清PDF

Java 架构 微服务 Spring Cloud spring cloud alibaba

牛掰!阿里架构师熬夜肝了一份JVM必知必会,哪里不会查哪里

Java 性能优化 JVM

鲸鸿动能广告接入如何高效变现流量?

HarmonyOS SDK

HMS Core

精选!字节大佬带你一周刷完Java面试八股文,比啃书效果好多了

Java你猿哥

Java 算法 ssm java面试 java知识点

从浏览器输入域名开始分析DNS解析过程

华为云开发者联盟

开发 华为云 DNS 华为云开发者联盟 企业号 5 月 PK 榜

Redis和MySQL扛不住,B站分布式存储系统如何演进?

Java你猿哥

Java MySQL redis ssm kv

本周日直播,全链路数据治理实践论坛开放报名

阿里云大数据AI技术

大数据 数据治理

Java并发编程必备:分布式锁的选型和性能对比

Java 数据库 分布式锁

阿里官方上线!号称Java面试八股文天花板(2023最新版)首次开源

Java你猿哥

Java redis Spring Boot JVM java面试

独家巨献!阿里专家兼Github贡献者,整理的SpringBoot入门到成神

Java spring 架构 微服务 Spring Boot

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