Обсуждение: trappable warnings, dynamic change of minimal level for PG_RE_THROW
Hello SQL/PSM concept of condition's handlers suppouses so all signals (all levels of exception's) are trappable. Common construct is: begin declare finish boolean default false; declare continue handler for sqlwarning set finish = true; open cursor whilenot finish do fetch from cursor end while; close cursor; end; Every compound statement in sql/psm has default empty continue handler for success, warning and not found signal's. Current code in errfinish (elog.c) throw signal only when level is error. if (elevel == ERROR) { ... PG_RE_THROW(); } I have to dynamicly change this level for all sql/psm block. Can be solution using of global variable? Like error_context_stack? hypotetic code from pl/plpgsql/src/pl_exec.c static int exec_stmt_block(PLpgPSM_execstate *estate, PLpgPSM_stmt_block *block) { int current_min_level = error_min_level; /* global variable from elog.c */ min_level = INFO; .... PG_TRY() .... PG_CATCH() .... PG_END_TRY() error_min_level = current_min_level; } Is it safe? Any ideas? Regards Pavel Stehule _________________________________________________________________ Chcete sdilet sve obrazky a hudbu s prateli? http://messenger.msn.cz/
"Pavel Stehule" <pavel.stehule@hotmail.com> writes: > Current code in errfinish (elog.c) throw signal only when level is error. > I have to dynamicly change this level for all sql/psm block. Can be solution > using of global variable? Like error_context_stack? You certainly would not want to use TRY/CATCH to handle warnings, because that way would cause the statement to be aborted before completion, quite possibly without essential cleanup. Another problem is that the conditions you are interested don't produce elog messages at all (and shouldn't). You need a new mechanism for this, likely. regards, tom lane