当前位置: 首页 > news >正文

PostgreSQL如何关闭自动commit

PostgreSQL如何关闭自动commit

在 PostgreSQL 中,默认情况下,每个 SQL 语句都会自动提交(即 AUTOCOMMIT 是开启的)。如果希望关闭自动提交,以便手动控制事务的提交和回滚,可以通过以下方法实现。

1 使用 BEGIN 或 START TRANSACTION 手动控制事务

PostgreSQL 中,可以通过显式地使用 BEGIN 或 START TRANSACTION 来开启一个事务块。在事务块中,所有的修改操作(如 INSERT、UPDATE、DELETE)都不会自动提交,直到显式地执行 COMMIT 或 ROLLBACK。

示例

white=# \d yewu1.test10Table "yewu1.test10"Column |         Type          | Collation | Nullable | Default 
--------+-----------------------+-----------+----------+---------id     | integer               |           |          | name   | character varying(20) |           |          | white=# begin;
BEGIN
white=*# insert into yewu1.test10 values(1,'haha1');
INSERT 0 1
white=*# commit;
COMMITwhite=# --如果不执行begin,再执行commit的话,会提示已无事务
white=# 
white=# insert into yewu1.test10 values(2,'haha2');
INSERT 0 1
white=# commit;
WARNING:  there is no transaction in progress
COMMIT

在 BEGIN 和 COMMIT 之间的所有操作都属于同一个事务。
如果在事务中发生错误或显式执行 ROLLBACK,所有修改都会被撤销。

2 使用 SET AUTOCOMMIT 关闭自动提交

PostgreSQL 的某些客户端工具(如 psql)中,可以通过 SET AUTOCOMMIT 命令关闭自动提交。在 psql 中关闭自动提交
启动 psql 并连接到数据库。
执行以下命令关闭自动提交:\set AUTOCOMMIT off

示例

white=# \set AUTOCOMMIT off
white=# insert into yewu1.test10 values(4,'haha4');
INSERT 0 1
white=*# commit;
COMMIT
white=#
关闭 AUTOCOMMIT 后,每个 SQL 语句都需要显式地提交或回滚。

3 注意事项

事务隔离级别:在手动控制事务时,注意事务的隔离级别(如 READ COMMITTED、REPEATABLE READ 等),以确保数据一致性。
锁争用:长时间未提交的事务可能会导致锁争用,影响其他会话的性能。
资源占用:未提交的事务会占用数据库资源,直到提交或回滚。
http://www.lryc.cn/news/538063.html

相关文章:

  • 1、云原生写在前面
  • Redis离线安装
  • 网络安全-攻击流程-应用层
  • java八股文-spring
  • Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改
  • 【Scrapy】Scrapy教程2——工作原理
  • 探索 DeepSeek:AI 领域的璀璨新星
  • 宏基传奇swift edge偶尔开机BIOS重置
  • 自动驾驶---如何打造一款属于自己的自动驾驶系统
  • 【C语言】第一期——数据类型变量常量
  • 04运维实用篇(D4_日志)
  • centos部署open-webui
  • UE求职Demo开发日志#32 优化#1 交互逻辑实现接口、提取Bag和Warehouse的父类
  • Visonpro 检测是否有缺齿
  • 第1章大型互联网公司的基础架构——1.6 RPC服务
  • 今日AI和商界事件(2025-02-15)
  • 算法题(69):搜索插入位置
  • 在 Linux 系统中,tc(Traffic Control) QoS 常用命令简介
  • 如何画产品功能图、结构图
  • 4090单卡挑战DeepSeek r1 671b:尝试量化后的心得的分享
  • SpringBoot速成(12)文章分类P15-P19
  • C++17中的clamp函数
  • 配置Open-R1,评测第三方蒸馏模型的性能1
  • Chrome插件开发流程
  • 物联网行业通识:从入门到深度解析
  • 【做一个微信小程序】校园事件页面实现
  • C++基础系列【14】继承与多态
  • DeepSeek-R1 大模型本地部署指南
  • 在conda环境下,安装Pytorch和CUDA
  • Java里int和Integer的区别?