0

我想从 Haskell 执行一个 Postgres 函数,它更新 3 行,但用RETURNS VOID. 我按如下方式运行该函数:

catch (do execute conn "select record(?,?)" [id1, id2])
      (\(e :: SomeException) -> do putStrLn ("Exception:" ++ (show e)); return False)

但这会导致:

QueryError {qeMessage = "execute resulted in Col 1-column result", qeQuery = "select record(?,?)"}

查询不返回结果:

ebdb=> select record('','');
 record
--------------------

(1 row)

如何从 Haskell 执行这个 Postgresql 函数?

4

3 回答 3

1

我收到此错误并找到了此问题,但无法切换到,query因为我使用的是execute用于数据库迁移的库。(我需要一个空/无操作迁移。)

这是我最终使用的方法:

UPDATE arbitrary_but_real_table_name
  SET arbitrary_text_column = 'this will not happen' 
  WHERE 'this is not null' IS NULL;

希望这对某人有帮助!

于 2018-05-17T16:46:13.653 回答
1

这个棘手的查询不返回任何行,仍然执行该函数:

select 1 where record('', '') isnull;
于 2016-07-24T13:33:42.453 回答
1

我会尝试使用query而不是execute

query conn "select 1 from record(?,?)" [id1, id2]

execute适用于 , 等语句INSERTUPDATE即使您的语句不返回任何行,它仍然是 aSELECT所以我认为您需要使用query它来运行它。

于 2016-07-24T13:39:24.720 回答