haskell-beam/beam

How to use Postgres Functions?

开放

#758 创建于 2025年4月19日

 (2 条评论) (0 个反应) (0 位负责人)Haskell (191 个派生)auto 404
docsgood first issuehelp wanted

仓库指标

星标
 (631 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

Hi there, I'm trying to call a PostgreSQL function such as the following from within my haskell code, with no success:

CREATE FUNCTION my_fancy_function
       (arg1 integer,
        arg2 character varying) 
RETURNS character varying
LANGUAGE plpgsql
AS $$
BEGIN 
    RETURN "Success"
END
$$;

Initially, I tried using customExpr_ and got this error when attempting to make my own SELECT my_fancy_function(1, 'something'); via a function with (Monoid a, IsString a) as in the docs:

SqlError {sqlState = "42601", sqlExecStatus = FatalError, sqlErrorMsg = "syntax error at or near \"SELECT\"", sqlErrorDetail = "", sqlErrorHint = ""}

Later on I discovered that there is functionCallE, but I could not get it to work. My first attempt was something like this (this does not type check):

functionCall_ ::
  (Projectible be a, BeamSqlBackend be, IsSql99ExpressionSyntax syntax) =>
  Text ->
  [QExpr syntax s a] ->
  QExpr syntax s t
functionCall_ functionName args = QExpr (const $ functionCallE (functionNameE functionName) args)

Further, assuming functionCall_ can be made, would we use it via the function select? I noticed that we don't have SqlExpression as we do for SqlSelect, SqlInsert, and SqlUpdate. Thanks in advance.

贡献者指南