Puede usar json_array_elements
función para generar un SETOF json
de una matriz:
SELECT name, json_array_elements(data) AS author
FROM publisher
Teniendo eso, puede usarlo como una subconsulta, para que pueda filtrar lo que quiera, por ejemplo:
SELECT DISTINCT author->>'author'
FROM (
SELECT name, json_array_elements(data) AS author
FROM publisher
) t
WHERE t.author->>'type' = 'Novel';
Solo tenga en cuenta que si tiene muchas filas en esta tabla, el rendimiento de tales consultas (al menos para la versión actual, 9.3) será realmente malo. Te recomiendo que normalices los datos en tablas.