函数上的PostgreSQL简单`execute`失败,“执行导致Col 1列结果”

时间:2016-07-24 13:16:03

标签: postgresql haskell postgresql-simple

我想从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函数?

3 个答案:

答案 0 :(得分:1)

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

select 1 where record('', '') isnull;

答案 1 :(得分:1)

我会尝试使用query代替execute

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

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

答案 2 :(得分:1)

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

以下是我最终使用的内容:

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

希望这有助于某人!