PostgreSQL忘记输入where条件update更新整张表的解决办法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

虽然出现这个错误很挫,但有时候还是会被你或者你的同事碰到。为了避免这个错误,PostgreSQL数据库中可以通过触发器来解决,这里用的是plpgsql 。

1、修改postgresql.conf配置

增加:custom_variable_classes = 'limits'
重新加载:pg_ctl reload

2、创建触发器函数

CREATE OR REPLACE FUNCTION zero_counter()RETURNS TRIGGERLANGUAGE plpgsqlAS
$BODY$
DECLARE
BEGINPERFORM set_config('limits.test', '0', true);IF TG_OP = 'UPDATE' THENRETURN NEW;END IF;RETURN OLD;
END;
$BODY$;
CREATE OR REPLACE FUNCTION limit_modifications()RETURNS TRIGGERLANGUAGE plpgsqlAS
$BODY$
DECLAREi INT4;
BEGINi := current_setting('limits.test')::INT4 + 1;PERFORM set_config('limits.test', i::TEXT, true);IF i > 5000 THENRAISE EXCEPTION '% of more than 5000 row is forbidden.', TG_OP;END IF;IF TG_OP = 'UPDATE' THENRETURN NEW;END IF;RETURN OLD;
END;
$BODY$;

3、测试

forummon=# create table test as select i as id, 'password for: ' || i as pass from generate_series(1,10000) i;
forummon=# CREATE TRIGGER zero_counter BEFORE UPDATE OR DELETE ON test FOR EACH STATEMENT EXECUTE PROCEDURE zero_counter();
CREATE TRIGGER
forummon=# CREATE TRIGGER limit_modifications BEFORE UPDATE OR DELETE ON test FOR EACH ROW EXECUTE PROCEDURE limit_modifications();
CREATE TRIGGER
forummon=# \d+ test Table "public.test"Column | Type | Modifiers | Storage | Stats target | Description 
--------+---------+-----------+----------+--------------+-------------id | integer | | plain | | pass | text | | extended | | 
Triggers:limit_modifications BEFORE DELETE OR UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE limit_modifications()zero_counter BEFORE DELETE OR UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE zero_counter()
Has OIDs: no
forummon=# update test set pass = 'qq' where id<5003 ;
ERROR: UPDATE of more than 5000 row is forbidden.
forummon=# update test set pass = 'qq' where id<5000 ;
UPDATE 4999
forummon=# drop table test ;
DROP TABLE

总结

批量操作的数量限制可以在limit_modifications中修改,切记在update不确定时先select再update。

参考连接:http://www.depesz.com/2007/07/27/update-account-set-password-new_password-oops/

原文地址:http://www.sijitao.net/1996.html

转载于:https://my.oschina.net/u/270810/blog/502000

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

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

相关文章

视觉开发需要什么程度的数学_角度的概念在视觉上非常直观,但其数学定义并不是那么简单...

角的概念是几何学中最基本的概念之一。当我们研究三角形的性质时&#xff0c;我们自然地建立了三角形的边和角之间的联系。这些联系是在三角学中系统地建立起来的。角是什么&#xff1f;我们如何测量它&#xff1f;虽然角度的概念在视觉上很直观&#xff0c;但它的数学定义却不…

轻松搭建Google ADK开发环境

相信很多网友一直有自己DIY机器人的想法&#xff0c;但苦于要使用的各种控制模块品种繁多、成本高昂、且开发难度较高。但是随着Google发布了任何人均可自由开发Android终端外设的协议“Open Accessory Protocol”后&#xff0c;大家可以利用Android手机上的丰富资源以及完善的…

搭建nginx + python + django +memcached+ mysql +fastcgi 环境

Django是一个开放源代码的Web应用框 架,由Python写成,它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。pythondjango也是web开发者最受欢 迎的框架.今天记录下整个搭建开发环境的过程.(说明下环境的系统为 centos 5.2) 一:更新yum仓库(目前这个yu…

别薅了别薅了!!!再薅就真的被薅秃了!!

▲ 点击查看大家好&#xff0c;超模全新的固定栏目「薅羊毛」上线了&#xff01;既然是薅羊毛&#xff0c;怎么能空着手来&#xff1f;毕竟好用的好吃的&#xff0c;啥都要花钱。与其为那些虚幻的包装价值买单&#xff0c;不如跟着超模君狠狠地薅一把羊毛&#xff0c;「花小钱赚…

GitHub Universe 2021|MS Reactor 邀你共聚年度盛会

关注我们GitHub Universe 2021 将于2021年10月27-28日&#xff08;PDT&#xff09;在线直播&#xff0c;MS Reactor 将与 CSDN 合作进行转播&#xff0c;与你一同观看这场全球开发者盛会。 关于 GitHub UniverseGitHub Universe 是 GitHub 面向全球开发者社区举办的年度重要盛会…

C#中的多线程 - 并行编程 z

原文&#xff1a;http://www.albahari.com/threading/part5.aspx 专题&#xff1a;C#中的多线程 1并行编程Permalink 在这一部分&#xff0c;我们讨论 Framework 4.0 加入的多线程 API&#xff0c;它们可以充分利用多核处理器。 并行 LINQ&#xff08;Parallel LINQ&#xff09…

java数组深拷贝和浅拷贝_java中的深拷贝与浅拷贝(值类型 vs 引用类型)

对象赋值赋值是日常编程过程中最常见的操作&#xff0c;最简单的比如&#xff1a;Student codeSheep new Student(); Student codePig codeSheep;严格来说&#xff0c;这种不能算是对象拷贝&#xff0c;因为拷贝的仅仅只是引用关系&#xff0c;并没有生成新的实际对象&#x…

C++遍历树-非递归递归-使用了标记位

//这不是最有效的方法&#xff0c;但使用了标记为容易理解&#xff0c;记下 /* * description:树的遍历示例&#xff0c;非递归版本 * 入栈顺序&#xff1a; * 前序&#xff1a; 右子树 - 左子树 - 当前节点 * 中序&#xff1…

模板打印函数

vector的元素可以是任意类型T&#xff0c;但必须具备赋值和拷贝能力&#xff08;具有public 拷贝构造函数和重载的赋值操作符). 其实很容易理解&#xff0c;自定义一些模板时&#xff0c;同样会需要其实例化类型具备默写操作&#xff08;如大于小于操作等。&#xff09; 下面一…

各大厂抢招WPF,小米这回是下了血本啊...

九银十进入尾声&#xff0c;小米又爆出高薪岗位&#xff1a;35k左右&#xff0c;14薪&#xff0c;招5年左右.NET&#xff0c;要求WPF和自动化( 职位&#xff1a;https://app.mokahr.com/apply/xiaomi/287/#/job/523278c0-c504-4cdc-bb88-28c1b101ac76)。今年招WPF的大厂太多了&…

你永远都不知道你老公可以多幼稚......

1 爸爸带女儿&#xff01;两个幼稚鬼▼2 常州一小区提醒防疫四种语言切换无压力▼3 我知道了&#xff01;他的门牙肯定有条缝▼4 狗子OS&#xff1a;今天栏杆和木棍必须要断一个▼5 掀起你的假发来让我帮你擦擦汗▼6 干啥啥不行&#xff0c;吃饭第一名▼7 一看就是亲妈&…

mysql数据库属性_mysql - 数据库操作和数据属性

数据库操作启动 mysql, mac 可通过 brew 安装 mysql 后启动。 window 需要手动配置1234567891011121314mysql.server start// windownet start mysql// 登录 -u 用户名 root 超级用户 -p 密码mysql -uroot -p// 退出mysql > q// 切换到 learn 数据库mysql > use learnMyS…

jQuery中,选择器既匹配开头又匹配结尾

jQuery中&#xff0c;选择器既匹配开头又匹配结尾的方法&#xff1a; 1 [attr^val]attr$val 2 [attr^val][attr$val] 转载于:https://www.cnblogs.com/taotaodetuer/p/4790915.html

linux下解压命令大全

.tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09;———————————————.gz解压1&#xff1a;gunzip FileName.gz解压2&#xff1a;gzip -d…

正则基础之——神奇的转义

1 概述 这或许会是一个让人迷惑&#xff0c;甚至感到混乱的话题&#xff0c;但也正因为如此&#xff0c;才有了讨论的必要。 在正则中&#xff0c;一些具有特殊意义的字符&#xff0c;或是字符序列&#xff0c;被称作元字符&#xff0c;如“?”表示被修饰的子表达式匹配…

没有女朋友,可能是因为你数学不好

全世界只有3.14 % 的人关注了爆炸吧知识孔子和耶稣曾说过&#xff1a;初恋无限好。回想起青涩的大学时光&#xff0c;告别了高中时代紧张的学习氛围和父母、老师的谆谆告诫&#xff0c;爱情也不再是伊甸园里的禁果。关于爱情的开展和维系&#xff0c;在Levinger&#xff08;198…

C#10,带来了Date和Time类型

C#10引入了日期DateOnly&#xff0c;时间TimeOnly&#xff1a;//从DateTime转换 Console.WriteLine(DateOnly.FromDateTime(DateTime.Now)); //从字会串转换 Console.WriteLine(DateOnly.Parse("2021-10-23")); //从0001-01-01到现在的天数 Console.WriteLine(DateOn…

mysql插入时间区间_mybatis插入数据时返回主键以及MySQL根据时间区间查询问题总结...

最近做项目的过程中&#xff0c;在数据库方面遇到了两个问题&#xff0c;一是在插入一条数据的时候需要将该条数据的主键返回、二是根据时间区间进行查询时某一天的数据查询不到&#xff0c;在此总结记录一下。1、如何在插入一条数据的同时将主键返回在实体类的映射文件 "…

DML语言(重点)———insert

数据库的意义&#xff1a;数据存储&#xff0c;数据管理 DML语言&#xff1a;数据操作语言 1.insert:添加 2.update:修改 3.delete&#xff1a;删除 DML-添加数据 1.给指定字段添加数据 INSERT INTO 表名(字段名1&#xff0c;字段名2&#xff0c;……) VALUES(值1&#…

android下升级软件介绍

编译android&#xff1a; 生成&#xff1a;system.img,ramdisk.img,userdata.img映像文件。 ramdisk.img是emulator的文件系统 system.img包括了主要的包、库等文件 userdata.img包括了一些用户数据 emulator加载这3个映像文件后&#xff0c;会把 system和 userdata分别加载到 …