diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 584f4f1..40560ac 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -467,7 +467,12 @@ standard_ProcessUtility(PlannedStmt *pstmt, ListCell *cell; char *name = NULL; - RequireTransactionChain(isTopLevel, "SAVEPOINT"); + if (!IsTransactionBlock()) + ereport(ERROR, + (errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION), + /* translator: %s represents an SQL statement name */ + errmsg("%s can only be used in transaction blocks", + "SAVEPOINT"))); foreach(cell, stmt->options) { @@ -484,12 +489,22 @@ standard_ProcessUtility(PlannedStmt *pstmt, break; case TRANS_STMT_RELEASE: - RequireTransactionChain(isTopLevel, "RELEASE SAVEPOINT"); + if (!IsTransactionBlock()) + ereport(ERROR, + (errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION), + /* translator: %s represents an SQL statement name */ + errmsg("%s can only be used in transaction blocks", + "RELEASE SAVEPOINT"))); ReleaseSavepoint(stmt->options); break; case TRANS_STMT_ROLLBACK_TO: - RequireTransactionChain(isTopLevel, "ROLLBACK TO SAVEPOINT"); + if (!IsTransactionBlock()) + ereport(ERROR, + (errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION), + /* translator: %s represents an SQL statement name */ + errmsg("%s can only be used in transaction blocks", + "ROLLBACK TO SAVEPOINT"))); RollbackToSavepoint(stmt->options); /*