Skip to content

Instantly share code, notes, and snippets.

@matheusoliveira
Last active November 27, 2018 08:54
Show Gist options
  • Save matheusoliveira/57be10ec5206cdc36607ae04fcf838a7 to your computer and use it in GitHub Desktop.
Save matheusoliveira/57be10ec5206cdc36607ae04fcf838a7 to your computer and use it in GitHub Desktop.
Query to get current temp files in PostgreSQL (needs SUPERUSER)
WITH temp_dirs AS (
SELECT s1.dir || s1.version || '/pgsql_tmp' AS dir_name
FROM
(
SELECT
'pg_tblspc/' || spc.oid::text || '/' AS dir,
l.version
FROM
(
SELECT spc1.oid
FROM
pg_tablespace spc1
WHERE
spc1.spcname NOT LIKE 'pg_%' OFFSET 0
) AS spc
CROSS JOIN LATERAL pg_ls_dir('pg_tblspc/' || spc.oid::text || '/') AS l(version)
WHERE
l.version LIKE 'PG_' || regexp_replace(current_setting('server_version'), '(\.[0-9]+|[a-z0-9])$', '') || '%'
) AS s1
WHERE
EXISTS(
SELECT 1
FROM pg_ls_dir(s1.dir || s1.version) AS l(item)
WHERE l.item = 'pgsql_tmp'
)
UNION ALL
SELECT
'base/pgsql_tmp'
WHERE
EXISTS(
SELECT 1
FROM pg_ls_dir('base/') AS l(item)
WHERE l.item = 'pgsql_tmp'
)
)
SELECT
td.dir_name,
l.temp_file,
substring(l.temp_file FROM 'pgsql_tmp([0-9]+).[0-9]+') AS pid,
stat.*
FROM
temp_dirs AS td
CROSS JOIN LATERAL pg_ls_dir(td.dir_name) AS l(temp_file)
CROSS JOIN LATERAL pg_stat_file(td.dir_name || '/' || l.temp_file) AS stat
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment