Postgresql 18 now supports OLD and NEW in RETURNING clauses. From the manual example.
UPDATE products SET price = price * 1.10
WHERE price <= 99.99
RETURNING name, old.price AS old_price, new.price AS new_price,
new.price - old.price AS price_change;