У меня есть процедура:
CREATE OR REPLACE PROCEDURE parse_file(
p_task_id integer
) AS $$
DECLARE
v_error_message text;
BEGIN
UPDATE file_task SET status = 'processing' WHERE task_id = p_task_id;
COMMIT;
-- do some inserts
UPDATE file_task SET status = 'done' WHERE task_id = p_task_id;
EXCEPTION
WHEN OTHERS THEN
GET STACKED DIAGNOSTICS v_error_message = MESSAGE_TEXT;
UPDATE file_task SET status = 'failed', errors = ARRAY[v_error_message]
WHERE task_id = p_task_id;
END;
$$ LANGUAGE plpgsql;
Процедура анализирует файл и управляет статусами. Как я могу выполнить фиксацию после обновления статуса до «обрабатывается», чтобы, если другое задание запускается и видит, что файл все еще обрабатывается, он ничего не делает.