44.9. ÐÑпомогаÑелÑнÑе ÑÑнкÑии #
ÐодÑÐ»Ñ plpy Ñакже пÑедоÑÑавлÑÐµÑ ÑÑнкÑии
plpy.debug( |
plpy.log( |
plpy.info( |
plpy.notice( |
plpy.warning( |
plpy.error( |
plpy.fatal( |
ФÑнкÑии plpy.error и plpy.fatal на Ñамом деле вÑдаÑÑ Ð¸ÑклÑÑение Python, коÑоÑое, еÑли его не пеÑеÑ
ваÑиÑÑ, ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² вÑзÑваÑÑий запÑоÑ, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑекÑÑей ÑÑанзакÑии или подÑÑанзакÑии. ÐÐ¾Ð¼Ð°Ð½Ð´Ñ raise plpy.Error( и msg)raise plpy.Fatal( ÑавнознаÑÐ½Ñ Ð²Ñзовам msg)plpy.error( и msg)plpy.fatal(, ÑооÑвеÑÑÑвенно, но ÑоÑма msg)raise не позволÑÐµÑ Ð¿ÐµÑедаваÑÑ Ð°ÑгÑменÑÑ Ñ ÐºÐ»ÑÑами. ÐÑÑгие ÑÑнкÑии пÑоÑÑо вÑдаÑÑ ÑообÑÐµÐ½Ð¸Ñ ÑазнÑÑ
ÑÑовней важноÑÑи. ÐÑдÑÑ Ð»Ð¸ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑнного ÑÑÐ¾Ð²Ð½Ñ Ð¿ÐµÑедаваÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñам и/или запиÑÑваÑÑÑÑ Ð² жÑÑнал ÑеÑвеÑа, опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑми пеÑеменнÑми log_min_messages и client_min_messages. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº Ðлаве 19.
ÐÑгÑÐ¼ÐµÐ½Ñ msg задаÑÑÑÑ ÐºÐ°Ðº позиÑионнÑй. ÐÐ»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑедано неÑколÑко позиÑионнÑÑ
аÑгÑменÑов. Ð ÑÑом ÑлÑÑае ÑообÑением Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñа ÑÑановиÑÑÑ ÑÑÑоковое пÑедÑÑавление коÑÑежа позиÑионнÑÑ
аÑгÑменÑов.
ÐополниÑелÑно ÑолÑко по клÑÑам пÑинимаÑÑÑÑ ÑледÑÑÑие аÑгÑменÑÑ:
detail |
hint |
sqlstate |
schema_name |
table_name |
column_name |
datatype_name |
constraint_name |
СÑÑоковое пÑедÑÑавление обÑекÑов, пеÑедаваемÑÑ Ð² аÑгÑменÑÐ°Ñ Ð¿Ð¾ клÑÑам, позволÑÐµÑ Ð²ÑдаÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð±Ð¾Ð»ÐµÐµ богаÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ. ÐапÑимеÑ:
CREATE FUNCTION raise_custom_exception() RETURNS void AS $$
plpy.error("custom exception message",
detail="some info about exception",
hint="hint for users")
$$ LANGUAGE plpython3u;
=# SELECT raise_custom_exception();
ERROR: plpy.Error: custom exception message
DETAIL: some info about exception
HINT: hint for users
CONTEXT: Traceback (most recent call last):
PL/Python function "raise_custom_exception", line 4, in <module>
hint="hint for users")
PL/Python function "raise_custom_exception"ÐÑÑ Ð¾Ð´Ð¸Ð½ Ð½Ð°Ð±Ð¾Ñ Ð²ÑпомогаÑелÑнÑÑ
ÑÑнкÑий обÑазÑÑÑ plpy.quote_literal(, ÑÑÑока)plpy.quote_nullable( и ÑÑÑока)plpy.quote_ident(. Ðни ÑавнознаÑÐ½Ñ Ð²ÑÑÑоеннÑм ÑÑнкÑиÑм заклÑÑÐµÐ½Ð¸Ñ Ð² кавÑÑки, опиÑаннÑм в Разделе 9.4. Ðни Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¿Ñи конÑÑÑÑиÑовании Ñвободно ÑоÑÑавлÑемÑÑ
запÑоÑов. Ðа PL/Python динамиÑеÑкий SQL, показаннÑй в ÐÑимеÑе 41.1, ÑоÑмиÑÑеÑÑÑ Ñак: ÑÑÑока)
plpy.execute("UPDATE tbl SET %s = %s WHERE key = %s" % (
plpy.quote_ident(colname),
plpy.quote_nullable(newvalue),
plpy.quote_literal(keyvalue)))