Evitar conflitos na nomeação da UDF
Você pode evitar potenciais conflitos e resultados inesperados considerando suas convenções de nomenclatura de UDFs antes da implementação. Como os nomes de função podem ser sobrecarregados, eles podem colidir com nomes de função existentes e futuros do Amazon Redshift. Este tópico discute a sobrecarga e apresenta uma estratégia para evitar conflitos.
Sobrecarga de nomes de função
Uma função é identificada por seu nome e assinatura, que é o número de argumentos de entrada e tipos de dados dos argumentos. Duas funções no mesmo esquema podem ter o mesmo nome se tiverem assinaturas diferentes. Em outras palavras nomes de função podem ser sobrecarregados.
Quando você executa uma consulta, o mecanismo de consulta determina qual função deve ser chamada com base no número de argumentos fornecidos e nos tipos de dados dos argumentos. Você pode usar a sobrecarga para simular funções com um número variável de argumentos, até o limite permitido pelo comando CREATE FUNCTION.
Evitar conflitos com funções integradas do Amazon Redshift
Recomendamos que você nomeie todas as UDFs usando o prefixo f_
. O Amazon Redshift reserva o prefixo f_
exclusivamente para UDFs e ao prefixar seus nomes de UDF com f_
, você garante que seu nome de UDF não entrará em conflito com nenhum nome de função SQL integrado do Amazon Redshift existente ou futuro. Por exemplo, ao nomear uma nova UDF f_sum
, você evita conflito com a função SUM do Amazon Redshift. Da mesma forma, se você nomear uma nova função f_fibonacci
, evitará conflito se o Amazon Redshift adicionar uma função chamada FIBONACCI em uma versão futura.
Você pode criar uma UDF com o mesmo nome e assinatura de uma função SQL integrada existente do Amazon Redshift sem que o nome da função seja sobrecarregado se a UDF e a função integrada existirem em esquemas diferentes. Como as funções integradas existem no esquema de catálogo de sistema, pg_catalog, você pode criar uma UDF com o mesmo nome em outro esquema, tal como um esquema público ou definido pelo usuário. Em alguns casos, é possível chamar uma função que não está explicitamente qualificada com um nome de esquema. Em caso afirmativo, o Amazon Redshift pesquisa primeiro o esquema pg_catalog por padrão. Assim, uma função interna é executada antes de uma nova UDF com o mesmo nome.
Você pode alterar esse comportamento configurando o caminho de pesquisa para colocar pg_catalog no final. Se você fizer isso, suas UDFs tomem precedência sobre funções integradas, mas a prática pode causar resultados inesperados. A adoção de uma estratégia de nomeação exclusiva, tal como a utilização do prefixo reservado f_
, é uma prática mais confiável. Para ter mais informações, consulte SET e search_path.