--Approach 1: The all in one WTF
-- Advantage: 1 step and no temp junk created
-- so safe to nest into other subqueries and reuse
--- Disadvantage: Messy to read,
-- could be slow for large sets,
-- and relies on a primary key
SELECT row_number, oldtable.*
FROM (SELECT * FROM people) As oldtable
CROSS JOIN (SELECT ARRAY(SELECT name_id
FROM people
ORDER BY last_name, first_name) As id) AS oldids
CROSS JOIN generate_series(1, (SELECT COUNT(*)
FROM people)) AS row_number