Мне не совсем ясно, возможно ли условно выполнять операторы SQL с использованием необработанных SQL
функций в Postgres, или вам нужно использовать plpgsql
с IF
операторами для этого.
По сути, я пытаюсь сделать следующее:
CREATE OR REPLACE FUNCTION public.usp_reply_to_convo(convo_id BIGINT, person_id INTEGER, body TEXT)
RETURNS TABLE(convo_reply_id BIGINT, person_id integer)
LANGUAGE sql
AS $function$
-- SELECT timeout_until FROM person WHERE person_id = $1;
-- IF timeout_until > now() RETURN timeout_until
-- ELSE do the below
INSERT INTO convo_reply (convo_id, person_id, body) VALUES ($1, $2, $3);
RETURNING convo_reply_id, person_id;
$function$;
Где пользователь может ответить на разговор, если его значение timeout_until
меньше now()
. А если это не так, то запрос не выполняется, и вместо этого возвращается значение времени ожидания.
Возможно ли подобное с необработанным SQL или plpgsql
необходимо?
Кроме того, есть ли способ справиться с тем фактом, что эта функция может возвращать две вещи? Либо возвращает метку времени ожидания, либо идентификатор ответа на разговор. Не уверен, как справиться с этими конкурирующими проблемами.