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.

貢獻者指南