PostgreSQL-простой `execute` для функции завершается с ошибкой"execute приводит к результату Col-столбца "
Я хочу выполнить функцию Postgres из Haskell, которая обновляет 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)
Как я могу выполнить эту функцию Postgresql из Haskell?
3 ответа
Я бы попробовал использовать query
вместо execute
:
query conn "select 1 from record(?,?)" [id1, id2]
execute
для таких заявлений, как INSERT
, UPDATE
и т. д. Даже если ваш оператор не возвращает никаких строк, он все равно SELECT
так что я думаю, что вам нужно использовать query
запустить его.
Этот сложный запрос не возвращает строк, но функция все же выполняется:
select 1 where record('', '') isnull;
Я получил эту ошибку и нашел этот вопрос, но не смог переключиться на query
потому что я использую библиотеку, которая использует execute
для миграции базы данных. (Мне нужна была пустая / неоперационная миграция.)
Вот то, что я в конечном итоге использовал, который работал:
UPDATE arbitrary_but_real_table_name
SET arbitrary_text_column = 'this will not happen'
WHERE 'this is not null' IS NULL;
Надеюсь, это поможет кому-то!