PostgreSQL 9.2 introduce una nuova istruzione in PL/pgSQL: GET STACKED DIAGNOSTICS
.
Questo comando espone varie informazioni riguardanti un’eccezione intercettata in PL/pgSQL. In particolare:
RETURNED_SQLSTATE
: codice dell’erroreMESSAGE_TEXT
: messaggio dell’errorePG_EXCEPTION_DETAIL
: dettagli aggiuntivi sull’errore (ove disponibili)PG_EXCEPTION_HINT
: suggerimenti sulle possibili cause (ove disponibili)PG_EXCEPTION_CONTEXT
: contesto in cui si è verificato l’erroreQuesto comando è un’estensione del già presente GET DIAGNOSTICS
.
Avere a disposizione tutte queste informazioni rende il debug del proprio codice estremamente migliore.
L’esempio sottostante permette di vedere il comando all’opera, accedendo all’interno della funzione debug
a informazioni estese riguardanti l’eccezione.
BEGIN; CREATE TABLE t ( id INTEGER PRIMARY KEY, mess TEXT ); CREATE OR REPLACE FUNCTION debug( i_sql TEXT ) RETURNS BOOLEAN AS $BODY$ DECLARE v_state TEXT; v_msg TEXT; v_detail TEXT; v_hint TEXT; v_context TEXT; BEGIN BEGIN EXECUTE i_sql; EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_state = RETURNED_SQLSTATE, v_msg = MESSAGE_TEXT, v_detail = PG_EXCEPTION_DETAIL, v_hint = PG_EXCEPTION_HINT, v_context = PG_EXCEPTION_CONTEXT; raise notice E'Got exception: state : % message: % detail : % hint : % context: %', v_state, v_msg, v_detail, v_hint, v_context; RETURN False; END; RETURN True; END; $BODY$ LANGUAGE plpgsql; -- Un'istruzione SQL valida SELECT debug('SELECT 1'); -- Un'istruzione SQL valida SELECT debug('INSERT INTO t VALUES(1)'); -- Un errore (chiave duplicata) SELECT debug('INSERT INTO t VALUES(1)'); -- Un errore di sintassi SELECT debug('INSERT t VALUES(2)'); ROLLBACK;
This Post Has 0 Comments