C/C++教程

PostgreSQL数据库事务系统Upper Layer——BeginTransactionBlock

本文主要是介绍PostgreSQL数据库事务系统Upper Layer——BeginTransactionBlock,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在这里插入图片描述
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;
	}
}
这篇关于PostgreSQL数据库事务系统Upper Layer——BeginTransactionBlock的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!