Give a more specific error message if you try to COMMIT, ROLLBACK or COPY

FROM STDIN in PL/pgSQL. We alread did this for dynamic EXECUTE statements,
ie. "EXECUTE 'COMMIT'", but not otherwise.
This commit is contained in:
Heikki Linnakangas 2010-10-29 11:41:28 +03:00
parent 6c3c7b533e
commit f184de351d
1 changed files with 11 additions and 0 deletions

View File

@ -2889,6 +2889,17 @@ exec_stmt_execsql(PLpgSQL_execstate *estate,
exec_set_found(estate, false);
break;
/* Some SPI errors deserve specific error messages */
case SPI_ERROR_COPY:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cannot COPY to/from client in PL/pgSQL")));
case SPI_ERROR_TRANSACTION:
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("cannot begin/end transactions in PL/pgSQL"),
errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
default:
elog(ERROR, "SPI_execute_plan_with_paramlist failed executing query \"%s\": %s",
expr->query, SPI_result_code_string(rc));