zl程序教程

PostgreSQL之事务

  • Postgresql源码(73)两阶段事务PrepareTransaction事务如何与会话解绑(上)

    Postgresql源码(73)两阶段事务PrepareTransaction事务如何与会话解绑(上)

    相关 《Postgresql源码(69)常规锁简单分析》 《Postgresql源码(73)两阶段事务PrepareTransaction事务如何与会话解绑(上)》 《Postgresql源码(74)两阶段事务PrepareTransaction事务如何与会话解绑(下)》 总结速查:PrepareTransaction类似于事务提交过程,因为事务提交也会将事务状态与会话解绑、做清理工作。

    日期 2023-06-12 10:48:40     
  • Postgresql源码(74)两阶段事务PrepareTransaction事务如何与会话解绑(下)

    Postgresql源码(74)两阶段事务PrepareTransaction事务如何与会话解绑(下)

    相关 《Postgresql源码(69)常规锁简单分析》 《Postgresql源码(73)两阶段事务PrepareTransaction事务如何与会话解绑(上)》 《Postgresql源码(74)两阶段事务PrepareTransaction事务如何与会话解绑(下)》 1 两阶段事务使用的特殊PGPROCInitProcGlobal时,申请的所有PGPROC如下图所示:PGPROC数

    日期 2023-06-12 10:48:40     
  • Oracle与Postgresql在PLSQL内事务回滚的重大差异

    Oracle与Postgresql在PLSQL内事务回滚的重大差异

    相关 《Oracle/Mysql迁移到Postgresql事务回滚行为差异及改造方法》 《Oracle与Postgresql在PLSQL内事务回滚的重大差异》 这个差异点非常容易造成Oracle迁移到PG后业务逻辑出现重大差异。1 总结先放总结Oracle:在PLSQL内如果语句执行失败,进入异常处理程序后,PL程序正常退出。那么在执行失败语句前面的SQL不会回滚,执行结果都正常提交了。P

    日期 2023-06-12 10:48:40     
  • Postgresql中plpgsql事务管理实例(commit/rollback)

    Postgresql中plpgsql事务管理实例(commit/rollback)

    总结commit与rollback都会主动把之前的事务结束掉,然后再自动开启新事务。知道这一点,后面所有用例的行为就都很好理解了。commit与rollback会主动关闭游标,例外是for循环中的commit/rollback会把游标转换为hold状态,循环内部可以一直保持open状态,直到循环结束。commit and chain与rollback and chain语法会使用与前一个事务相同的

    日期 2023-06-12 10:48:40     
  • Postgresql实验系列(2)批量获取事务ID

    Postgresql实验系列(2)批量获取事务ID

    1 背景本文通过简单修改开源Postgresql源码,实现批量获取事务ID的功能,对比前后性能差异。周末实验项目for fun,代码可以随意使用。 !!!注意:修改会带来的并发问题会造成数据不一致,ProcArray和快照的逻辑很多都是在XID严格递增的情况下设计的,修改后的xid空洞、跳变需要很大的修改量来适配。 2 改造前(性能数据没有太大参考意义,只用于前后对比)16C小规格测试机128并

    日期 2023-06-12 10:48:40     
  • Postgresql中不支持事务块中调用plpgsql回滚(多层exception、事务块有检查点)

    Postgresql中不支持事务块中调用plpgsql回滚(多层exception、事务块有检查点)

    前言Postgresql使用子事务来实现EXCEPTION的功能,即在进入EXCEPTION的存储过程前,会自动起一个子事务,如果发生了异常,则自动回滚子事务,达成EXCEPTION的效果。那么如果在事务块内本身就带子事务(SAVEPOINT),在调用有EXCEPTION的存储过程,处理流程会有一些复杂。目前下面代码中的rollback会直接报错不支持,但报错被exception掩盖了,所以后续的

    日期 2023-06-12 10:48:40     
  • Postgresql源码(93)Postgresql函数内事务控制实现原理(附带Oracle对比)

    Postgresql源码(93)Postgresql函数内事务控制实现原理(附带Oracle对比)

    相关 《Postgresql源码(60)事务系统总结》 《Postgresql源码(93)Postgresql函数内事务控制实现原理(附带Oracle对比)》 0 总结Postgresql与Oracle都是扁平化处理函数内外的事务控制语句的:即函数内的commit也会直接把函数外面的语句提交掉,函数外面的commit也会把之前函数内部的语句提交掉。区别是:Postgresql目前还不支持在

    日期 2023-06-12 10:48:40     
  • Postgresql源码(100)Portal与事务的关系(顶层事务与子事务)

    Postgresql源码(100)Portal与事务的关系(顶层事务与子事务)

    1 总结 portal与事务有强绑定的关系,由portal->createSubid变量记录关联关系。如果为1表示顶层事务,关联的是子事务。 不论是顶层事务还是子事务,提交、回滚时只会处理自己创建出来的portal。 顶层事务会清理非活跃状态的Portal,如果Portal是活跃的会保留内存。子事务直接释放portal,无论是否活跃。 PLpgSQL中的提交回滚,有较大限制: PLp

    日期 2023-06-12 10:48:40     
  • Postgresql源码(102)子事务控制语句分析

    Postgresql源码(102)子事务控制语句分析

    1 子事务控制语句分析1.1 执行savepoint执行函数:【立即执行】→DefineSavepoint→PushTransaction(从utility框架进入)【延迟执行】→StartSubTransaction(从顶层事务框架CommitTransactionCommand进入)准入条件:必须在事务块内,即顶级事务内TBLOCK_INPROGRESS 或子事务内 TBLOCK_SUBINP

    日期 2023-06-12 10:48:40     
  • PostgreSQL数据库事务插入删除及更新操作示例

    PostgreSQL数据库事务插入删除及更新操作示例

    INSERT语句格式: 里面的(列1,列2, )称为列清单;(值1,值2, )称为值清单。列清单和值清单个数要保持一致。 INSERT INTO 表名 (列1,列2, ) VALUES (值1,值2, ); INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, r

    日期 2023-06-12 10:48:40     
  • PostgreSQL事务回卷实战案例详析

    PostgreSQL事务回卷实战案例详析

    postgres=# select * from test; id  -(0 rows) postgres=# insert into test select 1;ERROR:  database is not accepting commands to avoid wraparound data loss in database xxxx HINT:  

    日期 2023-06-12 10:48:40     
  • PostgreSQL长事务与失效的索引查询浅析介绍

    PostgreSQL长事务与失效的索引查询浅析介绍

    最近刚写了一篇文章介绍了下长事务,以及一些长事务常见的危害,如无法及时的垃圾回收导致表膨胀之类的问题,最近刚好又碰到一个问题也是长事务所导致的。 上周六早上接到同事电话,说某个库CPU一直很高,看了下全是某张大表的全表扫描导致,但是奇怪的是相关的查询都有用到索引列,不知道为啥查询全部都没走索引。 当我连上去查看时发现确实如此,如果只是某个查询不走索引那可能是SQL本身写的有问题,但是这张表相

    日期 2023-06-12 10:48:40     
  • PostgreSQL长事务概念解析

    PostgreSQL长事务概念解析

    我们在很多地方应该都听到过长事务的危害,比方说长事务会导致表膨胀之类的。那么在PostgreSQL中什么才算是长事务呢? 首先,在PostgreSQL的官方文档中并没有所谓 长事务 这一定义,似乎大家约定俗称的把一个执行了很长却没有提交的事务认为是 长事务 了,而在不同的数据库中关于长事务的定义往往也不尽相同,那么在PostgreSQL中什么是长事务呢? 打个比方,如下所示,我在一个会话中通

    日期 2023-06-12 10:48:40     
  • 基于Postgresql 事务的提交与回滚解析

    基于Postgresql 事务的提交与回滚解析

    用过oracle或mysql的人都知道在sqlplus或mysql中,做一个dml语句,如果发现做错了,还可以rollback;掉,但在PostgreSQL的psql中,如果执行一个dml,没有先运行begin;的话,一执行完就马上提交了,不能回滚,这样容易导致误操作的发生,有没有什么办法避免这个风险呢? 当然有,在psql中默认是打开自动提交的,我们可以关闭自动提交,方法如下: 设置\se

    日期 2023-06-12 10:48:40     
  • Postgresql的pl/pgql使用操作–将多条执行语句作为一个事务

    Postgresql的pl/pgql使用操作–将多条执行语句作为一个事务

    INSERT INTO r_test_a (name, value, unit, mode, uid, create_ts) SELECT t_t , , ,2,0, extract(epoch from now())::bigint WHERE NOT EXISTS (SELECT id FROM r_test_a WHERE name = t_t AND value = AND un

    日期 2023-06-12 10:48:40     
  • PostgreSQL数据库事务实现方法分析

    PostgreSQL数据库事务实现方法分析

    本文实例讲述了PostgreSQL数据库事务实现方法。分享给大家供大家参考,具体如下: 事务简介 事务管理器:有限状态机 日志管理器 CLOG:事务的执行结果 XLOG:undo/redo日志 事务是所有数据库系统的一个基本概念。 一次事务的要点就是它把多个步骤捆绑成了一个单一的,不成功则成仁的操作。 其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题, 导致该

    日期 2023-06-12 10:48:40     
  • PostgreSQL数据库事务出现未知状态的处理方法

    PostgreSQL数据库事务出现未知状态的处理方法

    背景 数据库的事务是原子操作,要么成功,要么失败。但是实际上在客户端的视角,可能有第三种状态:unknown状态。 当客户端提交事务结束(rollback , commit , prepare xact , rollback pxact , commit pxact)的请求后,数据库收到请求,数据库可能执行失败,也可能执行成功,不管怎样都要写对于的WAL日志,还有CLOG,然后数据库要将执行

    日期 2023-06-12 10:48:40     
  • PostgreSQL事务详解数据库

    PostgreSQL事务详解数据库

    事务是所有数据库系统的一个基本概念。一次事务的要点就是把多个步骤捆绑成一个单一的、不成功则成仁的操作。其它并发的事务是看不到在这些步骤之间的中间状态的,并且如果发生了一些问题,导致该事务无法完成,那么所有这些步骤都完全不会影响数据库。 比如,假设一个银行的数据库包含各种客户帐户的余额,以及每个分行的总余额。假设我们要记录一次从 Alice 的帐户到 Bob 的帐户的金额为 $100.00 的支付

    日期 2023-06-12 10:48:40     
  • postgresql – 事务详解数据库

    postgresql – 事务详解数据库

    begin;//开启关闭自动提交的事务 insert into testtab01 values(0); savepoint first_savepoint;//创建事务保存点 insert into testtab02 values(1); rollback;//事务回滚 insert into testtab02 value

    日期 2023-06-12 10:48:40     
  • Postgresql数据库实现事务回滚技术(postgresql回滚)

    Postgresql数据库实现事务回滚技术(postgresql回滚)

    Postgresql作为一个业界比较流行的开源数据库,在实现数据处理服务上具有强大的功能和完备的技术支持,其中一个重要的部分就是事务回滚技术。 Postgresql事务回滚技术实现原理是根据ACID(原子性,一致性,隔离性,持久性)这四个原则将事务操作分为3步: (1)执行操作;(2)提交操作;(3)回滚操作。在回滚事务操作时,Postgresql会先将改变的数据存放在一个地方(WAL日志),

    日期 2023-06-12 10:48:40     
  • PostgreSQL pgbench SQL RT 与 事务RT 浅析

    PostgreSQL pgbench SQL RT 与 事务RT 浅析

    使用pgbench测试数据库性能时,在输出的报告中,可以输出事务的平均RT,以及单条SQL的平均RT。 那么这两个有什么分别呢? 每行代表一个线程,被填充了颜色的部分表示从客户端发起SQL到SQL返回的时间窗口,没有填充颜色的部分表示线程的空闲时间。 如何统计事务 平均RT : 执行的事务数/总的测试时长 如何统计SQL 平均RT : 每条SQL的执行时长累加/总的SQL执行次数

    日期 2023-06-12 10:48:40     
  • PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析

    PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析

    背景 对于金融级的应用场景,2个副本通常是不够的,用户可能会需要多个副本。 例如,一主4从,要求除了主以外,还需要2个同步的副本,其他可以为异步的副本。 另一方面,我们在使用数据库时,为了扩展读的能力,读写分离是比较常见的用法。 9.6以前的版本,同步复制是确保XLOG已经复制到备库,而不是已经在备库apply,虽然APPLY通常都很快,可能也在毫秒级别完成,但是以前没有apply级别

    日期 2023-06-12 10:48:40     
  • PostgreSQL的事务隔离分析

    PostgreSQL的事务隔离分析

    不懂的同学先补补概念Reference: WiKi 隔离级别(Isolation levels) 有四种隔离级别: 可序列化(Serializable) 可重复读(Repeatable reads) 提交读(Read committed) 未提交读(Read uncommitted) 昨天被问了一个问题 当存在表test(id int)并有id=1一条记录, 那么以下两种操作会有什么

    日期 2023-06-12 10:48:40     
  • PostgreSQL的事务隔离分析

    PostgreSQL的事务隔离分析

    不懂的同学先补补概念Reference: WiKi 隔离级别(Isolation levels) 有四种隔离级别: 可序列化(Serializable) 可重复读(Repeatable reads) 提交读(Read committed) 未提交读(Read uncommitted) 昨天被问了一个问题 当存在表test(id int)并有id=1一条记录, 那么以下两种操作会有什么

    日期 2023-06-12 10:48:40