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公共频道跨区列表,除此之外还有公共频道的…

了解开源文化

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

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

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

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

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

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…

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;已降低访问服务器端的压力。或者如果…

Activity之launchMode:singleTop,singleTask与singleInstance

相关内容&#xff0c;可以参见官方网址&#xff1a; http://developer.android.com/guide/components/tasks-and-back-stack.html 如图所示&#xff0c;如果ABC三个Activity的launchMode都是standard&#xff0c;那么按照图示顺序调用后&#xff0c;堆栈为ABCBB&#xff1b; …

傅立叶变换是如何改变我们生活的? ——四个角度告诉你答案

全世界只有3.14 % 的人关注了爆炸吧知识引子&#xff1a;尽管没有微积分那样如雷贯耳的名声&#xff0c;也没有相对论那般独辟蹊径的创新&#xff0c;傅立叶变换却悄悄地潜藏在我们生活中的方方面面&#xff0c;默默地改变着这个世界。对于工科出身的读者而言&#xff0c;傅立叶…

Win11新版右键菜单用不惯?一键切换回Win10经典版!

在 Windows 11 操作系统中&#xff0c;微软对文件资源管理器和应用程序的上下文菜单&#xff08;Context Menu&#xff0c;俗称“右键菜单”&#xff09;进行了现代化改造。Windows 11 新版右键菜单更加简约&#xff0c;并且融入圆角设计&#xff0c;将常用的命令剪切、复制、粘…

MySQL使用详解--根据个人学习总结

1.安装配置 2.启动mysql服务并配置 mysql> \s&#xff08;status也行&#xff09;查看当前服务器状态查看编码状态Server characterset : utf8Db characterset: utf8Client characterset: gbkConn. characterset: gbk修改&#xff1a;---进入配置文件my.ini客户端&#xff1…

送什么给女朋友最致命?

1 啊&#xff0c;原来里面有说明书&#xff08;via.豆瓣哈组&#xff0c;侵删&#xff09;▼2 网友给女朋友准备的惊喜&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 这个泰国小哥的创意真棒&#xff08;via.阿森不是妖怪&#xff0c;侵删&#xff09;▼4 老婆的…

SWF反编译神器ASV2013功能展示(下)

动作脚本菜单动作脚本-查看元件类动作脚本-编辑AS3常量池动作脚本-ASV内部ABC数据浏览器窗口菜单 选项菜单-帧视图选项 选项菜单-预览窗口选项选项菜单-时间线视图选项选项菜单-库视图选项 选项菜单-动作脚本视图选项实用工具菜单 关于对话框 转载于:https://blog.51cto.com/as…

【项目 报错】 项目启动,内存溢出 可能出现的各种报错

内存溢出可能有如下的错误&#xff1a; 错误1&#xff1a; java.lang.OutOfMemoryError: PermGen space 错误2&#xff1a; Exception in thread "http-apr-8080-exec-2" 出现如上的错误&#xff0c;解决方法如下&#xff1a; 1.双击Tomcat 2.点击open launch config…

2021,如何找到适合自己的圈子?

全世界只有3.14 % 的人关注了爆炸吧知识蔡康永分享过这样一段话&#xff1a;“小S的个性本身就是很乐天&#xff0c;很有活力&#xff0c;她这个朋友让我觉得活着是一件很值得、很舒服、很有趣的事。而有的人会让我觉得活着很没劲&#xff0c;碰到他会把我的能量都吸走”。你和…