Probably this can be done with pg_stat_kcache. Installing it with pg_stat_statements and querying it something like below will give stats per query:
rpopdb01d/postgres R # SELECT rolname, queryid, round(total_time::numeric, 2) AS total_time, calls,
pg_size_pretty(shared_blks_hit*8192) AS shared_hit,
pg_size_pretty(int8larger(0, (shared_blks_read*8192 - reads))) AS page_cache_hit,
pg_size_pretty(reads) AS physical_read,
round(blk_read_time::numeric, 2) AS blk_read_time,
round(user_time::numeric, 2) AS user_time,
round(system_time::numeric, 2) AS system_time
FROM pg_stat_statements s
JOIN pg_stat_kcache() k USING (userid, dbid, queryid)
JOIN pg_database d ON s.dbid = d.oid
JOIN pg_roles r ON r.oid = userid
WHERE datname != 'postgres' AND datname NOT LIKE 'template%'
ORDER BY reads DESC LIMIT 1;
rolname | queryid | total_time | calls | shared_hit | page_cache_hit | physical_read | blk_read_time | user_time | system_time
---------+------------+--------------+----------+------------+----------------+---------------+---------------+-----------+-------------
rpop | 3183006759 | 309049021.97 | 38098195 | 276 TB | 27 TB | 22 TB | 75485646.81 | 269508.98 | 35635.96
(1 row)
Time: 18.605 ms
rpopdb01d/postgres R #
Works only with 9.4+ and gives you statistics per query for all the time, not the current state.