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 发布,赶紧升级!!!相关推荐

  1. JBolt 1.5.0新版发布,升级到支持最新版JFinal和Jetty,实现了在线更新插件功能

    2019独角兽企业重金招聘Python工程师标准>>> JBolt是一个JFinal极速开发框架 定制版IDE插件 目前仅有Eclipse插件版,Idea插件版正在开发中. JBol ...

  2. 慧算账V2.0版发布,互联网记账再升级

    本文讲的是慧算账V2.0版发布,互联网记账再升级,日前,慧算账迎来了一次版本的更新升级,V2.0版正式震撼上线.据悉,新推出的版本除了继续提升产品功能和完善用户体验外,其在智能化方面的表现也相当惹眼, ...

  3. 袋鼠云“飞跃计划2.0”重磅发布:全面升级伙伴权益,共话数字生态

    4月20日,袋鼠云成功举行了以"数实融合,韧性生长"为主题的2023春季生长大会.会上重磅发布了袋鼠云生态伙伴计划--"飞跃计划2.0",从商机.产品.联合方案 ...

  4. 三星升级android 8.0,三星发布最新android 8.0升级计划 最快11月部分升级

    [TechWeb] 9 月 30 日消息,近日不少主流机型都已经预装android 8. 0 操作系统,可是去年的那些主流机型还处于旧系统状态,手机厂商开始加紧为主流机型加入安卓8. 0 升级计划.现 ...

  5. SpringBoot2.0(一):【重磅】Spring Boot 2.0权威发布

    就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...

  6. (转)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正式发布 ...

  7. 工信部:短信可为 16 亿用户提供行程证明;OPPO 回应造芯计划;Windows Terminal 0.9 发布| 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...

  8. 集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)

    集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)[@more@] 随着计算机技术的迅猛发展,我们面对的将不仅仅是随之而来的信息化时代,而是我们在这个时代中是否能够创造更多的价值. 操作系 ...

  9. 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...

    出品 | AI科技大本营(ID:rgznai100) [导语]2019年8月22日,腾讯首个AI开源项目Angel正式发布3.0版本.Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机 ...

最新文章

  1. 机器学习的优化目标、期望最大化(Expectation-Maximum, EM)算法、期望最大化(EM)和梯度下降对比
  2. Word中大括号内公式如何左对齐
  3. Linux下升级python2.4-python2.7
  4. extern C 的作用
  5. 软件评测师教程笔记(更新中)
  6. 从新手到Flutter架构师,一篇就够!吐血整理
  7. Quartz教程五:SimpleTrigger
  8. Entity Framework Fluent API
  9. Handler深入(分析源码,手写一套Handler)
  10. 【Code】背包问题九讲(崔添翼)
  11. Hexo博客-NexT主题自定义主页配置方法
  12. java百度地图离线开发_【“零起点”--百度地图手机SDK】如何使用离线地图?
  13. 基于Python构建机器学习Web应用
  14. 炎炎夏日送清凉,转发集赞得T恤,51CTO定制T恤免费送了
  15. pdf文件如何删除其中一页内容
  16. 2019全国大学生信息安全竞赛—Web
  17. oop三大特性--封装性
  18. 【GO富集分析】GO注释文件爬取
  19. python槽怎么用_PyQt4信号与槽详解
  20. 函数不正确如何修复?

热门文章

  1. 3732: Network
  2. vpx8运行待解决问题
  3. qqsafe病毒 arp网站挂马 原理剖析-786ts.qqsafe-qqservicesyydswfhuw8ysjftwf.org(转载)
  4. delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...
  5. stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)
  6. 输出最大值MXNet实现
  7. Shell_mysql命令以及将数据导入Mysql数据库
  8. 20165310_获奖感想与Java阶段性学习总结
  9. C/C++语言的特点
  10. [蓝桥杯] 蚂蚁感冒