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

虽然出现这个错误很挫,但有时候还是会被你或者你的同事碰到。为了避免这个错误,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

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

  1. 涨跌的例题用C语言编辑,仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案...

    问题场景 各大平台店铺的三项评分(物流.服务.商品)变化情况: 商品每日价格的变化记录: 股票的实时涨跌浮: 复现场景 表:主键ID,商品编号,记录时的时间,记录时的价格,创建时间. 问题:获取每个商 ...

  2. mysql更新两表所有记录语句怎么写_mysql 一条sql语句update更新两个表

    mysql 一条sql语句update更新两个表 你写过一条sql语句来修改两个表的数据吗? UPDATE test.table1 t1,test.table2 t2 SET t1.aa='a',t1 ...

  3. windows update更新时出现错误代码 8024200D解决方法(转)

    windows update更新时出现错误代码 8024200D解决方法(转) 参考文章: (1)windows update更新时出现错误代码 8024200D解决方法(转) (2)https:// ...

  4. 数据库:一张表update另外一张表实践

    参考了两个大神的写法: mysql 一张表update另一张表_qwurey的博客-CSDN博客_sql用一张表update另一张表 PostgreSQL根据一张表update另一张表_恩洛的博客-C ...

  5. 计算机无法更新正在撤销更改,win7系统无法完成更新正在撤销更改的解决办法...

    win7系统无法完成更新正在撤销更改的解决办法? 如果我们在使用win7更新系统的时候,出现了win7无法完成更新正在撤销更改请不要关闭你的计算机这样的提示,而且不关闭提醒就会一直收到提示.小编觉得可 ...

  6. VSCode 更新后打不开之解决办法

    VSCode 更新后打不开之解决办法 1 前言 前一段时间在使用 VSCode 的时候,通知窗口弹出了 更新版本 的提示,于是就点了进去,之后它自动的重装等一系列操作.更新完毕之后,等了一大段时间,没 ...

  7. ACCESS中的Update语句不支持Select的解决办法

    ACCESS中的Update语句不支持Select的解决办法执行 比如ACCESS中执行SQL语句: UPDATE HN_news AS a SET typeid = (select clid fro ...

  8. oracle回退的办法,【案例】Oracle for update回退导致业务阻塞的解决办法

    [案例]Oracle for update回退导致业务阻塞的解决办法 时间:2016-11-02 20:53   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Oracle研 ...

  9. 为什么insert操作会把整张表都锁住呢?

    为什么insert操作会把整张表都锁住呢? spring oracle 锁表 项目中遇到一个很奇怪的问题: 问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张 ...

最新文章

  1. 聊一聊ZooKeeper的顺序一致性
  2. 理解 Delphi 的类(六) - 认识类的封装
  3. Ubuntu安装软件失败
  4. python基础教程:startswith()和endswith()的用法
  5. 安装easy_install 和ipython
  6. oracle的tns错误,Oracle TNS-12514错误的解决步骤
  7. 页式管理--物理地址计算问题小结
  8. Hybird方案-概述
  9. pygame小游戏——英语单词挑战
  10. python 开发金山打字通辅助脚本
  11. 14届数独-真题标准数独-Day 6-20220121(补)
  12. Vue2实现长按图片识别二维码
  13. html制作备案表格代码,如何在首页中插入备案编号HTML代码
  14. My SQL 排序和分组
  15. java对接海康威视SDK(win64、linux64),处理播放实时流转码,按时间回放功能,附海康威视最新3.0摄像头监控web端实例+插件
  16. jsp表单提交中文乱码的解决
  17. bi比较好的公司,bi商业智能软件排名
  18. SVN异常处理——禁止访问
  19. 把你的阿里巴巴图标库转成你自己的@ant-design/icons
  20. c#.net command 命令详细分析

热门文章

  1. 听说现在都考这些React面试题
  2. java版电子商务spring cloud分布式微服务b2b2c社交电商(四)SpringBoot 整合JPA
  3. 什么是区块链预言机(BlockChain Oracle)
  4. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化
  5. Python:file (read,readline,readline )使用方法
  6. 算法学习笔记(三)-----各种基础排序问题
  7. 运行tomcat报Exception in thread ContainerBackgroundProcessor[StandardEngine[Catalina]]
  8. c#调用存储过程查询表并返回影响的行数
  9. Git中的日常使用 码云
  10. Log4j.properties 配置详解