使用 PostgreSQL 函数而不是加入?

age*_*ate 3 postgresql best-practices functions

我对如何做某事没有疑问,但我是否应该这样做。抱歉,如果有更合适的论坛。

我有一个功能:

CREATE OR REPLACE FUNCTION get_name(user_id UUID) RETURNS TEXT AS $$
    SELECT username
    FROM   users
    WHERE  users.id=user_id
$$ LANGUAGE 'sql';
Run Code Online (Sandbox Code Playgroud)

我喜欢使用这个函数在其他查询中从 user_id 转换为用户名。这是一个常见的操作,我认为一个函数会加快开发时间,以查找一次性统计数据以进行数据分析。我不关心查询速度。这是使用函数来执行此操作的好习惯还是我应该只执行连接?

我对此很陌生,我的同事说将函数用于常规选择/连接可以执行的操作是不好的做法。他还提到,函数最好用于常规选择无法完成的事情。所以我想问其他人什么是好的做法?

编辑:如果这是一种不好的做法,那么对于函数执行稍微复杂一些的常见操作的情况是否更合理?

Eva*_*oll 6

函数永远不会加速 SQL 已经完成的操作。事实上,如果你不实际添加IMMUTABLE它,它很可能会减慢它的速度。

我个人永远不会写这样一个陈词滥调的函数。

  • 如果您返回一行,我将使用相关子查询。
  • 如果您需要多个用户,我会加入。
  • 我可能会在身份验证时检索此类信息,就像在初始响应中一样,并将其发送回客户端进行处理。

但除此之外,这不仅仅是关于您功能的复杂性。您有一个 DSL,它显式查询您的模式,并且正是为此目的而创建的——即 SQL。当这些功能需要更多的逻辑和复杂性时,你会怎么做。在那里看到,下一步是函数中的 CASE 语句。然后,慢慢但肯定地重新创建动态查询生成机制。在需要时动态生成 SQL 更容易。