gleu/pgstats

Tempfile : KO on PG10

Closed this issue · 2 comments

15:32 $ pgstat -p10003 -s tempfile
--- size --- --- count ---
pgstat: pgstats: query failed: ERROR:  set-returning functions are not allowed in CASE
LINE 1: ...'/'||ls.sub AS dir, CASE gs.i WHEN 1 THEN '' ELSE pg_ls_dir(...
                                                             ^
HINT:  You might be able to move the set-returning function into a LATERAL FROM item.

pgstat: pgstats: query was: SELECT unnest(regexp_matches(agg.tmpfile, 'pgsql_tmp([0-9]*)')) AS pid,   SUM((pg_stat_file(agg.dir||'/'||agg.tmpfile)).size),   count(*) FROM   (SELECT ls.oid, ls.spcname,      ls.dir||'/'||ls.sub AS dir, CASE gs.i WHEN 1 THEN '' ELSE pg_ls_dir(dir||'/'||ls.sub) END AS tmpfile    FROM      (SELECT sr.oid, sr.spcname,              'pg_tblspc/'||sr.oid||'/'||sr.spc_root AS dir,              pg_ls_dir('pg_tblspc/'||sr.oid||'/'||sr.spc_root) AS sub       FROM (SELECT spc.oid, spc.spcname,                    pg_ls_dir('pg_tblspc/'||spc.oid) AS spc_root,                                  trim(trailing E'
 ' FROM pg_read_file('PG_VERSION')) as v             FROM (SELECT oid, spcname FROM pg_tablespace WHERE spcname !~ '^pg_') AS spc            ) sr       WHERE sr.spc_root ~ ('^PG_'||sr.v)       UNION ALL       SELECT 0, 'pg_default',              'base' AS dir,              'pgsql_tmp' AS sub              FROM pg_ls_dir('base') AS l             WHERE l='pgsql_tmp'      ) AS ls,      (SELECT generate_series(1,2) AS i) AS gs    WHERE ls.sub = 'pgsql_tmp') agg GROUP BY 1

Works fine on 9.6

gleu commented

This patch should fix this issue. (at least, it works for me :) )

Works for me too, thanks!