En PostgreSQL 8.4 no puede ordenar explícitamente array_agg
pero puede solucionarlo ordenando las filas pasadas al grupo/agregado con una subconsulta:
SELECT id, array_to_string(array_agg(image), ',')
FROM (SELECT * FROM test ORDER BY id, rank) x
GROUP BY id;
En PostgreSQL 9.0, las expresiones agregadas pueden tener un ORDER BY
cláusula:
SELECT id, array_to_string(array_agg(image ORDER BY rank), ',')
FROM test
GROUP BY id;