Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

对 UDF 命名

通过在实施前考虑您的 UDF 命名约定,可以避免潜在的冲突和意外结果。由于可以重载函数名称,因此它们可能会与现有和将来的 Amazon Redshift 函数名称发生冲突。本主题讨论重载并介绍一种避免冲突的策略。

重载函数名称

函数由其名称和签名 标识,后者是输入参数的数目和参数的数据类型。同一 schema 中的两个函数可具有相同的名称,前提是它们的签名不同。换句话说,函数名称可以重载

在执行查询时,查询引擎将根据您提供的参数数目和参数的数据类型来确定要调用哪个函数。您可以使用重载来模拟具有可变数量(不超过 CREATE FUNCTION 命令允许的限制)的参数的函数。

防止 UDF 命名冲突

建议您使用前缀 f_ 对所有 UDF 命名。Amazon Redshift 专门为 UDF 保留 f_ 前缀并使用 f_ 作为 UDF 名称的前缀,您可以确保您的 UDF 名称不会与任何现有或将来的 Amazon Redshift 内置 SQL 函数名称发生冲突。例如,通过将新 UDF 命名为 f_sum,可以避免与 Amazon Redshift SUM 函数发生冲突。同样,如果您将新函数命名为 f_fibonacci,则可当 Amazon Redshift 在将来版本中添加名为 FIBONACCI 的函数时避免发生冲突。

您可以创建与现有 Amazon Redshift 内置 SQL 函数具有相同名称和签名的 UDF,而无需重载函数名,前提是该 UDF 和内置函数存在于不同的 schemas 中。由于内置函数存在于系统目录 schema pg_catalog 中,因此您可以在另一个 schema(例如公共或用户定义的 schema)中创建具有相同名称的 UDF。当您调用未明确通过 schema 名称进行限定的函数时,默认情况下,Amazon Redshift 将首先搜索 pg_catalog schema,因此内置函数将在具有相同名称的新 UDF 之前运行。

您可以通过设置搜索路径以将 pg_catalog 置于结尾处来更改此行为,以便您的 UDF 优先于内置函数,但这样做可能会导致意外结果。采用唯一命名策略(例如,使用预留前缀 f_)是更可靠的做法。有关更多信息,请参阅 SETsearch_path