标签:case Upper Layer transaction PostgreSQL TBLOCK BEGIN break INPROGRESS
BeginTransactionBlock执行BEGIN命令,执行该函数后事务状态可以有如下改变:
- 未处于事务块中进入常规事务块 TBLOCK_STARTED–>TBLOCK_BEGIN
- 处于隐含事务块转换为常规事务块 TBLOCK_IMPLICIT_INPROGRESS–>TBLOCK_BEGIN
void BeginTransactionBlock(void) {
TransactionState s = CurrentTransactionState;
switch (s->blockState) {
/* We are not inside a transaction block, so allow one to begin. */
case TBLOCK_STARTED:
s->blockState = TBLOCK_BEGIN;
break;
/* BEGIN converts an implicit transaction block to a regular one. (Note that we allow this even if we've already done some commands, which is a bit odd but matches historical practice.) */
case TBLOCK_IMPLICIT_INPROGRESS:
s->blockState = TBLOCK_BEGIN;
break;
/* Already a transaction block in progress. */
case TBLOCK_INPROGRESS:
case TBLOCK_PARALLEL_INPROGRESS:
case TBLOCK_SUBINPROGRESS:
case TBLOCK_ABORT:
case TBLOCK_SUBABORT: ereport(WARNING,(errcode(ERRCODE_ACTIVE_SQL_TRANSACTION),errmsg("there is already a transaction in progress")));
break;
/* These cases are invalid. */
case TBLOCK_DEFAULT:
case TBLOCK_BEGIN:
case TBLOCK_SUBBEGIN:
case TBLOCK_END:
case TBLOCK_SUBRELEASE:
case TBLOCK_SUBCOMMIT:
case TBLOCK_ABORT_END:
case TBLOCK_SUBABORT_END:
case TBLOCK_ABORT_PENDING:
case TBLOCK_SUBABORT_PENDING:
case TBLOCK_SUBRESTART:
case TBLOCK_SUBABORT_RESTART:
case TBLOCK_PREPARE: elog(FATAL, "BeginTransactionBlock: unexpected state %s",BlockStateAsString(s->blockState));
break;
}
}
标签:case,Upper,Layer,transaction,PostgreSQL,TBLOCK,BEGIN,break,INPROGRESS 来源: https://blog.csdn.net/asmartkiller/article/details/120486587
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。