Exporter le résultat d’une requête SQL en JSON avec PostgreSQL

Avant que je n’oublie à nouveau, voici comment exporter le résultat d’une requête SQL en JSON avec PostgreSQL.

Supposons qu’on ait la table suivante :

SELECT * FROM user;

--  id | first_name | last_name | age
-- ----+-------------+-----------------
--   1 | Alice      | Hamilton  | 101
--   2 | Bob        | Bemer     |  84
-- (2 rows)

Il suffit alors d’utiliser les fonctions row_to_json pour convertir chaque ligne en un document JSON et json_agg pour convertir le tout en un tableau de documents JSON :

COPY (
    SELECT json_agg(row_to_json(user))
    FROM (
        SELECT id, first_name as firstname, last_name as lastname
        FROM user
        ORDER BY age ASC
    ) AS user
) TO '/tmp/users.json';

Et alors :

cat '/tmp/users.json'
[{"id":2,"firstname":"Bob","lastname":"Bemer"},{"id":1,"firstname":"Alice","lastname":"Hamilton"}]

Voilà !