Npgsql 6.0.2 发布,赶紧升级!!!

PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的 POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES 的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL 支持大部分的 SQL 标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样, PostgreSQL 也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发 PostgreSQL。

PostgreSQL 数据库在我们近几年的项目系统中,使用的频率极高。原因很简单:免费、高效、强大!而在.NET项目中使用 PostgreSQL 数据库,最常见的大概就是使用 Npgsql 作为驱动。

Npgsql在2021年11月9日,发布了全新的6.0.0版。从该版本开始 Npgsql 原生支持了多主机负载均衡和故障转移、支持通过OpenTelemetry报告跟踪数据、支持新 .NET 的 DateOnly 和 TimeOnly 类型等等。「还有一项被很多开发者忽视的改变」:出于性能优化的原因,参数名称默认开始区分大小写, 开发人员可以通过代码

AppContext.SetSwitch("Npgsql.EnableLegacyCaseInsensitiveDbParameters", true);

控制 Npgsql 像旧版本一样忽视参数大小写。

其实呢,一些不严谨按大小写区分的方式写的 .NET 程序,在升级后由于默认区分大小写让程序爆出一些异常来,也是程序员们可以接受的。但是如果程序逻辑完全发生变化,甚至是毁灭性影响的话,你可能会欲哭无泪的。

所以 Npgsql 紧急发布了「6.0.2」版本,还原为默认不区分大小写了!

为什么呢?源起有人在 Github 的 Npgsql 官方库中,发布一条Issue,来说明默认区分大小写带来的一种毁灭性打击。

6fe0aa678dc20da61f0518a6b8e1ff47.png

意思就是,如果一条简单的 SQL 语句如下:

delete from persons where "id"=@id

本意是根据传递的id参数值,删除对应的一行记录。而如果在执行这个语句的时候传的参数名不是小写的id,而是写成了Id。带来的结果却是把 persons 表内的数据全部删除了!!!

roji 在随后的回复中,说明了造成这个问题的是由于如下问题交织在一起后引发的:

  • PostgreSQL 数据库本身不支持命名参数,而是使用参数位置代替的,也就是、2...

  • Npgsql 通过重写 SQL 来支持的命名参数,将 @id 转变为 $1

  • 如果 Npgsql 在你的参数匹配时找不到对应名字的 NpgsqlParameter,则它不会翻译这个参数,而是原样输出,也就是 @id

  • PostgreSQL 中,标识符可以使用@作为前缀,即数据库会认为这是一个叫id的字段,所以 @id 与 id 会等同

上述问题叠合在一起后,原来的 SQL 语句实际变成了:

delete from persons where "id"=id

等同于

delete from persons where 1=1

这问题在业务系统中绝对是毁灭性的。

所以,Npgsql 团队在 6.0.2 版本中修改了默认开关值,使得默认不再区分大小写。

20a2620af91db0353d674e995c69c744.png

「如果你正在使用 Npgsql 6.0.0或者 6.0.1 版,为了你的职业甚至生命安全,赶紧升级到6.0.2 吧」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之中获取应用程序(包)的信息-----PackageManager的使用(一)

转载:http://blog.csdn.net/qinjuning/article/details/6867806 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename、label、icon、占用大小等。具体分为两个 部分,计划如下: 第一部分: 获取应用程…

dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...

DNF公共频道组队连接不上?在大转移版本之后很多玩家表示DNF公共频道不能组队,实际上这个和大家所在的DNF公共频道跨区有关,位于同一个跨区的玩家之间才能够组队,这里是一份DNF公共频道跨区列表,除此之外还有公共频道的…

JDK中DNS缓存的分析

在JAVA中使用InetAddress.getByName(String host) 方法来获取给定hostname的IP地址。为了减少DNS解析的请求次数,提高解析效率,InetAddress中提供cache来缓存解析结果。 下面就此cache进行简单的分析: 该缓存实现比较简单,巧妙的利…

了解开源文化

开放源码软件运动是计算机科学领域的一种文化现象,源自***对智慧成果共享、自由的追求。开源运动发展到现在,这种能够积极促进人类文明发展的文化已经***到信息、教育、健康等领域,融入了哲学范畴。开放源码运动的史前史包括了整个Unix&#…

jquery验证手机号码和邮箱地址例子

为什么80%的码农都做不了架构师?>>> //jquery验证邮箱 function checkSubmitEmail(){ if($("#email").val()""){ $("#confirmMsg").html("邮箱地址不能为空!"); $("#email").focus()…

.NET 6新特性试用 | 可写JSON DOM API

前言我们常用JSON的方式&#xff0c;是将类对象序列化/反序列化:var user new User { Name "My IO" }; var json JsonSerializer.Serialize(user); var newUser JsonSerializer.Deserialize<User>(json);而通过System.Text.Json提供的可写JSON DOM API&…

网页设计的css样式,网页设计引入CSS样式的五种方式_css

一、使用STYLE属性将STYLE属性直接加在个别的元件标签里&#xff0c;&#xff1c;元件(标签) STYLE”性质(属性)1: 设定值1; 性质(属性)2: 设定值2; …}例如&#xff1a;&#xff1c;TD STYLE”COLOR:BLUE; font-size:9pt; font-family:”标楷体”; line-height:150%&#xff1…

C#薪水和前途

这1&#xff0c;2年有更新简历&#xff0c;一直在看市场行情&#xff0c;最近这么多年在聊C#的薪水&#xff0c;我也说说我看到的情况&#xff0c;只限上海&#xff1b; 仅供大家参考&#xff1b; 高端职位&#xff1a; 纯技术&#xff0c;不谈管理&#xff0c; 一般是架构师职…

Heritrix 3.1.0 源码解析(十一)

上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的&#xff0c;那么在系统初始化的时候&#xff0c;是怎么载入CrawlURI curi种子的呢&#xff1f; 我们回顾前面的文章&#xff0c;在我们执行采集任务的launch指令的时候&#xff0c;实际会调用CrawlController对象的v…

令人难忘的初吻描写......

1 我可以把你删了吗&#xff0c;我没有内存了&#xff08;via.豆瓣陈皮&#xff0c;侵删&#xff09;▼2 黑社会平时都在干些什么&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 老师头秃是有原因的▼4 是谁炸了珍珠港&#xff1f;&#xff08;素材来源网络&…

Android之获取应用程序(包)的大小-----PackageManager的使用(二)

http://blog.csdn.net/qinjuning/article/details/6892054 通过第一部分 << Android中获取应用程序(包)的信息-----PackageManager的使用(一) >>的介绍&#xff0c;对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。 本部分的内…

eclipse创建maven多模块项目(单个类似)

2019独角兽企业重金招聘Python工程师标准>>> 1、下载安装maven 1.1、下载 注意&#xff1a;maven的版本&#xff0c;要根据你的jdk版本来下载。要不会安装失败&#xff0c;提示版本问题哦 Jdk 对应的maven版本如图:&#xff08;官网地址&#xff1a;http://maven.ap…

如何通过 C# 判断一个 路径 是本机还是远程 ?

咨询区 David Boike请问在 C# 中是否有好的方式判断 path 是在本地还是在远程,我想到了用 UNC 属性来判断&#xff0c;比如下面的代码&#xff1a;new Uri(path).IsUnc但这代码也有一定的问题,它会误判下面的 path 格式。\\machinename\sharename\directory \\10.12.34.56\shar…

交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现

摘要&#xff1a;随着VoIP(Voice over Internet Protocol,俗称网络电话)的迅速发展,单纯的语音业务已经无法满足用户和市场的需求,因此一种具有多媒体业务的VoIP的方案——IP媒体服务器因此产生了。它可以提供更具个性化和差异性的增值业务,而且可以为提供商带来更高的利润。国…

Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)

http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html转载于:https://www.cnblogs.com/cliffhuang/p/3708696.html

web服务器的基本应用

WEB服务器也称为WWW(WORLD WIDE WEB)即是所谓的万维网服务器&#xff0c;主要功能是提供网上信息浏览服务。 最常用的大型Web服务器是Apache和微软的Internet信息服务器&#xff08;Internet Information Server&#xff0c;所谓的IIS服务器&#xff09;、IBM WebSphere以及BE…

Android 之PackageManager框架

http://blog.csdn.net/stonecao/article/details/6591454 1.接着前面讲的ActivityManager框架&#xff0c;继续说一下系统另一个重要的框架&#xff0c;PackagerManager 同样先看一下静态类结构图&#xff1a; 大部分情况我们是在Activity中使用getPackageManager方法获取一个…

有一个会泰勒级数的八岁表妹是怎样一种体验?

全世界只有3.14 % 的人关注了爆炸吧知识上一篇文章超模君给大家介绍了欧拉公式&#xff0c;很多粉丝问我&#xff1a;八岁表妹明明还是小学生&#xff0c;是怎么知道泰勒级数的意思的?答案其实很简单&#xff0c;这当然和我们全家优秀的基因...不&#xff01;优良的家教有关&a…

限流中间件IpRateLimitMiddleware的使用

前言IpRateLimitMiddleware&#xff08;Github: AspNetCoreRateLimit&#xff09; 是ASPNETCore的一个限流的中间件&#xff0c;用于控制客户端调用API的频次&#xff0c; 如果客户端频繁访问服务器&#xff0c;可以限制它的频率&#xff0c;已降低访问服务器端的压力。或者如果…