如何在 Sequel 中创建 SQL 函数?

bra*_*ahn 4 ruby sql function sequel

我有一个包含大量 SQL 脚本的项目,我正在将该项目迁移到Sequel中。

在旧脚本中,我定义了大量 SQL 函数来构建查询。我应该如何创建这些函数以便我可以从 Sequel 访问它们?

例如我有一个 SQL 函数

CREATE FUNCTION my_func(...) RETURNS integer AS $$
  SELECT ...
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)

我应该将上面的文本放在一个字符串中并调用以下内容吗?

DB.run("CREATE FUNCTION my_func(...) RETURNS integer AS $$ 
          SELECT ... 
        $$ LANGUAGE SQL;")
Run Code Online (Sandbox Code Playgroud)

看来可能还有更好的办法。

我可以使用 Sequel 将函数本身重写为 ruby​​ 函数,但我不相信这会实现我想要的,因为我想要运行在WHERE子句等中使用 SQL 查询的查询。

谢谢!

Jer*_*ans 5

Sequel 实际上支持创建 PostgreSQL 函数:

DB.create_function('myfunc', 'SELECT ...', :args=>[:integer, :text], :returns=>:integer)
Run Code Online (Sandbox Code Playgroud)

但是,我很遗憾添加了此内容,并且可能会将其移至下一个主要版本中的扩展。在我看来,使用DB.run像这样的数据库特定的东西是正确的方法。