時間:2024-02-28 13:28作者:下載吧人氣:23
本文實例講述了PostgreSQL數據庫事務實現方法。分享給大家供大家參考,具體如下:
事務簡介
事務是所有數據庫系統的一個基本概念。 一次事務的要點就是它把多個步驟捆綁成了一個單一的,不成功則成仁的操作。 其它并發的事務是看不到在這些步驟之間的中間狀態的,并且如果發生了一些問題, 導致該事務無法完成,那么所有這些步驟都完全不會影響數據庫。PostgreSQL為每條事務創建一個postgre進程,并發執行事務。采用分層的機制執行事務,上層事務塊和底層事務。上層事務塊是用戶眼中的事務,用于控制事務執行的狀態;底層事務是事務中的每條語句,可以改變上層事務塊的狀態。
上層事務塊
每個postgre進程只有一個事務塊,上層事務塊記錄著本次事務執行過程中的各個狀態。
typedef enum TBlockState
{
/* not-in-transaction-block states */
TBLOCK_DEFAULT, /* idle */
TBLOCK_STARTED, /* 執行簡單查詢事務 */
/* transaction block states */
TBLOCK_BEGIN, /* 遇見事務開始BEGIN */
TBLOCK_INPROGRESS, /* 事務正在執行中 */
TBLOCK_PARALLEL_INPROGRESS, /* live transaction inside parallel worker */
TBLOCK_END, /* 遇見事務結束COMMIT/END的時候設置 */
TBLOCK_ABORT, /* 事務出錯,等待ROLLBACK */
TBLOCK_ABORT_END, /* 事務出錯,收到ROLLBACK */
TBLOCK_ABORT_PENDING, /* 事務處理中,接收到ROLLBACK */
TBLOCK_PREPARE, /* 事務處理中,收到PREPARE(分布式事務) */
/* subtransaction states */
TBLOCK_SUBBEGIN, /* starting a subtransaction */
TBLOCK_SUBINPROGRESS, /* live subtransaction */
TBLOCK_SUBRELEASE, /* RELEASE received */
TBLOCK_SUBCOMMIT, /* COMMIT received while TBLOCK_SUBINPROGRESS */
TBLOCK_SUBABORT, /* failed subxact, awaiting ROLLBACK */
TBLOCK_SUBABORT_END, /* failed subxact, ROLLBACK received */
TBLOCK_SUBABORT_PENDING, /* live subxact, ROLLBACK received */
TBLOCK_SUBRESTART, /* live subxact, ROLLBACK TO received */
TBLOCK_SUBABORT_RESTART /* failed subxact, ROLLBACK TO received */
} TBlockState;
網友評論