SYS_UDF_LOG
Registra mensagens de erro e aviso definidas pelo sistema que são geradas durante a execução da função definida pelo usuário (UDF).
SYS_UDF_LOG está visível somente para superusuários. Para ter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.
Colunas da tabela
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
query_id | bigint | O identificador da consulta. |
function_name | text | O nome da função definida pelo usuário. |
record_time | timestamp | A hora em que o log foi criado. |
sequence | inteiro | A sequência de uma única mensagem de log. |
message | text | O texto da mensagem de log. |
Consultas de exemplo
O exemplo a seguir mostra como as UDFs tratam os erros definidos pelo sistema. O primeiro bloco mostra a definição de uma função de UDF que retorna o inverso de um argumento. Quando você executa a função e fornece 0 como argumento, a função retorna um erro. A última instrução retorna a mensagem de erro registrada em SYS_UDF_LOG.
-- Create a function to find the inverse of a number. CREATE OR REPLACE FUNCTION f_udf_inv(a int) RETURNS float IMMUTABLE AS $$return 1/a $$ LANGUAGE plpythonu; -- Run the function with 0 to create an error. Select f_udf_inv(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log;
query_id | record_time | message ----------+----------------------------+------------------------------------------------------- 2211 | 2023-08-23 15:53:11.360538 | ZeroDivisionError: integer division or modulo by zero line 2, in f_udf_inv\n return 1/a\n
O exemplo a seguir adiciona o registro em log e uma mensagem de aviso à UDF para que operações de divisão por zero gerem uma mensagem de aviso em vez de interromper o processamento com uma mensagem de erro.
-- Create a function to find the inverse of a number and log a warning if you input 0. CREATE OR REPLACE FUNCTION f_udf_inv_log(a int) RETURNS float IMMUTABLE AS $$ import logging logger = logging.getLogger() #get root logger if a==0: logger.warning('You attempted to divide by zero.\nReturning zero instead of error.\n') return 0 else: return 1/a $$ LANGUAGE plpythonu; -- Run the function with 0 to trigger the warning. Select f_udf_inv_log(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log;
query_id | record_time | message ----------+----------------------------+------------------------------------------------------------------------------- 0 | 2023-08-23 16:10:48.833503 | WARNING: You attempted to divide by zero.\nReturning zero instead of error.\n