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,来说明默认区分大小写带来的一种毁灭性打击。
意思就是,如果一条简单的 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 版本中修改了默认开关值,使得默认不再区分大小写。
「如果你正在使用 Npgsql 6.0.0或者 6.0.1 版,为了你的职业甚至生命安全,赶紧升级到6.0.2 吧」
Npgsql 6.0.2 发布,赶紧升级!!!相关推荐
- JBolt 1.5.0新版发布,升级到支持最新版JFinal和Jetty,实现了在线更新插件功能
2019独角兽企业重金招聘Python工程师标准>>> JBolt是一个JFinal极速开发框架 定制版IDE插件 目前仅有Eclipse插件版,Idea插件版正在开发中. JBol ...
- 慧算账V2.0版发布,互联网记账再升级
本文讲的是慧算账V2.0版发布,互联网记账再升级,日前,慧算账迎来了一次版本的更新升级,V2.0版正式震撼上线.据悉,新推出的版本除了继续提升产品功能和完善用户体验外,其在智能化方面的表现也相当惹眼, ...
- 袋鼠云“飞跃计划2.0”重磅发布:全面升级伙伴权益,共话数字生态
4月20日,袋鼠云成功举行了以"数实融合,韧性生长"为主题的2023春季生长大会.会上重磅发布了袋鼠云生态伙伴计划--"飞跃计划2.0",从商机.产品.联合方案 ...
- 三星升级android 8.0,三星发布最新android 8.0升级计划 最快11月部分升级
[TechWeb] 9 月 30 日消息,近日不少主流机型都已经预装android 8. 0 操作系统,可是去年的那些主流机型还处于旧系统状态,手机厂商开始加紧为主流机型加入安卓8. 0 升级计划.现 ...
- SpringBoot2.0(一):【重磅】Spring Boot 2.0权威发布
就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...
- (转)Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布
http://www.ityouknow.com/springboot/2018/03/01/spring-boot-2.0.html 就在今天Spring Boot2.0.0.RELEASE正式发布 ...
- 工信部:短信可为 16 亿用户提供行程证明;OPPO 回应造芯计划;Windows Terminal 0.9 发布| 极客头条...
整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...
- 集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)
集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)[@more@] 随着计算机技术的迅猛发展,我们面对的将不仅仅是随之而来的信息化时代,而是我们在这个时代中是否能够创造更多的价值. 操作系 ...
- 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...
出品 | AI科技大本营(ID:rgznai100) [导语]2019年8月22日,腾讯首个AI开源项目Angel正式发布3.0版本.Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机 ...
最新文章
- 机器学习的优化目标、期望最大化(Expectation-Maximum, EM)算法、期望最大化(EM)和梯度下降对比
- Word中大括号内公式如何左对齐
- Linux下升级python2.4-python2.7
- extern C 的作用
- 软件评测师教程笔记(更新中)
- 从新手到Flutter架构师,一篇就够!吐血整理
- Quartz教程五:SimpleTrigger
- Entity Framework Fluent API
- Handler深入(分析源码,手写一套Handler)
- 【Code】背包问题九讲(崔添翼)
- Hexo博客-NexT主题自定义主页配置方法
- java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?
- 基于Python构建机器学习Web应用
- 炎炎夏日送清凉,转发集赞得T恤,51CTO定制T恤免费送了
- pdf文件如何删除其中一页内容
- 2019全国大学生信息安全竞赛—Web
- oop三大特性--封装性
- 【GO富集分析】GO注释文件爬取
- python槽怎么用_PyQt4信号与槽详解
- 函数不正确如何修复?
热门文章
- 3732: Network
- vpx8运行待解决问题
- qqsafe病毒 arp网站挂马 原理剖析-786ts.qqsafe-qqservicesyydswfhuw8ysjftwf.org(转载)
- delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...
- stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)
- 输出最大值MXNet实现
- Shell_mysql命令以及将数据导入Mysql数据库
- 20165310_获奖感想与Java阶段性学习总结
- C/C++语言的特点
- [蓝桥杯] 蚂蚁感冒