我想从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函数?
答案 0 :(得分:1)
这个棘手的查询不返回任何行,但仍然执行该函数:
select 1 where record('', '') isnull;
答案 1 :(得分:1)
我会尝试使用query
代替execute
:
query conn "select 1 from record(?,?)" [id1, id2]
execute
适用于INSERT
,UPDATE
等语句。即使您的语句没有返回任何行,它仍然是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;
希望这有助于某人!