From: Heikki Linnakangas Date: Fri, 29 Oct 2010 08:41:28 +0000 (+0300) Subject: Give a more specific error message if you try to COMMIT, ROLLBACK or COPY X-Git-Tag: REL9_1_ALPHA2~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f184de351d6a35355aa8f1c1b655c3f6a5087205;p=postgresql 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. --- diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 4e9afd360b..3d20fa72c2 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -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));