Bạn đang quá phức tạp hóa mọi thứ. Khi bạn muốn trả về nhiều giá trị, bạn cần xác định hàm dưới dạng returns table
hoặc returns setof
. Tôi thích returns table
vì nó cũng cho phép bạn xác định tên cột của kết quả.
Bạn cũng không cần PL / pgSQL cho việc này, một hàm SQL thuần túy có UPDATE
tuyên bố là đủ:
CREATE OR REPLACE FUNCTION assign_task(IN worker text)
returns table (id bigint)
as
$BODY$
UPDATE queue
SET status = 'In progress', worker = $1
WHERE status = 'New'
RETURNING queueid;
$BODY$
LANGUAGE sql VOLATILE;