Перейти к основному содержимому

Функции для очистки неиспользуемых файлов в табличных пространствах

Функции, представленные в данном разделе, реализованы в рамках поставляемого расширения pg_orphaned для очистки неиспользуемых файлов в табличных пространствах.

Сведения

В функциях расширения реализован механизмdryrun, все действия с файлами можно запустить без реального выполнения (что является поведением по умолчанию) для предварительного анализа работы с данными. Чтобы выполнить действие с файлами, необходимо передать параметр true в аргументе nodryrun (значение по умолчанию - false). Все функции расширения доступны только суперпользователю, ограничение введено на уровне кода, выдать права на функции другим пользователям нельзя.

pg_list_orphaned()

Функция осуществляет поиск неиспользуемых файлов и вывод в консоль их списка.

Синтаксис:

pg_list_orphaned(older_than interval)
RETURNS record

Входные параметры:

Название параметраТип значенияОписание
older_thanintervalВременной интервал (значение по умолчанию - 1 сутки), файлы старше которого будут дополнительно отмечены

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
pathtextПуть к найденному файлу
nametextИмя найденного файла
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
reloidbigintoid отношения (для потерянных файлов 0)
olderboolФлаг, показывающий старше или нет файл переданного в функцию интервала

Пример использования:

SELECT * FROM pg_list_orphaned();

Пример вывода:

dbname   |                 path                  |    name     |    size    |        mod_time        | relfilenode | reloid | older
---------+---------------------------------------+-------------+------------+------------------------+-------------+--------+-------
First_db | pg_tblspc/16800/PG_13_202305111/16801 | 658459 | 1449984 | 2023-08-14 12:02:06+03 | 658459 | 0 | f
First_db | pg_tblspc/16800/PG_13_202305111/16801 | 658459_fsm | 24576 | 2023-08-14 12:02:06+03 | 658459 | 0 | f
First_db | pg_tblspc/16800/PG_13_202305111/16801 | 658462 | 917504 | 2023-08-14 12:02:06+03 | 658462 | 0 | f
First_db | pg_tblspc/16800/PG_13_202305111/16801 | t8_658465 | 1073741824 | 2023-08-14 12:00:15+03 | 658465 | 0 | f
First_db | pg_tblspc/16800/PG_13_202305111/16801 | t8_658465.1 | 376176640 | 2023-08-14 12:00:18+03 | 658465 | 0 | f
(5 rows)

pg_list_moved_orphaned()

Функция осуществляет поиск перемещенных файлов и вывод в консоль их списка.

Синтаксис:

pg_list_moved_orphaned(custom_backup_path text)
RETURNS record

Входные параметры:

Название параметраТип значенияОписание
custom_backup_pathtextПуть до каталога, в котором будет выполнен поиск (необязательный параметр, по умолчанию поиск будет осуществлен в каталогах табличных пространств каталога orphand_backup)

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
pathtextПуть к найденному файлу
nametextИмя найденного файла
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
reloidbigintoid отношения (для потерянных файлов 0)

Пример использования:

SELECT * FROM pg_list_moved_orphaned();

Пример вывода:

  dbname  |                                 path                                  |    name     |    size    |        mod_time        | relfilenode | reloid
----------+-----------------------------------------------------------------------+-------------+------------+------------------------+-------------+--------
First_db | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801 | 658459 | 1449984 | 2023-08-14 12:02:06+03 | 658459 | 0
First_db | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801 | 658459_fsm | 24576 | 2023-08-14 12:02:06+03 | 658459 | 0
First_db | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801 | 658462 | 917504 | 2023-08-14 12:02:06+03 | 658462 | 0
First_db | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801 | t8_658465 | 1073741824 | 2023-08-14 12:00:15+03 | 658465 | 0
First_db | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801 | t8_658465.1 | 376176640 | 2023-08-14 12:00:18+03 | 658465 | 0
(5 rows)

pg_move_orphaned()

Функция выполняет перемещение найденных неиспользуемых файлов, старше значения interval (по умолчанию 1 сутки) в промежуточный карантинный каталог, переданный в параметре backup_dir (если параметр не передан, данные каталоги будут созданы в каталогах с табличными пространствами). В случае, если в каталоге назначения уже есть файл с таким именем, функция запишет WARNING и файл будет пропущен.

Синтаксис:

pg_move_orphaned (older_than interval, custom_backup_path text, nodryrun boolean)
RETURNS record

Входные параметры:

Название параметраТип значенияОписание
older_thanintervalВременной интервал (значение по умолчанию - 1 сутки)
custom_backup_pathtextПуть к пользовательскому каталогу для перемещения найденных файлов. Если не указан — используется стандартный каталог в табличных пространствах
nodryrunbooleanРежим выполнения: false — только поиск и вывод найденных файлов (без перемещения), true — фактическое перемещение файлов

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
pathtextПуть к найденному файлу
nametextИмя найденного файла
dest_pathtextПуть для перемещения файла
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
reloidbigintoid отношения (для потерянных файлов 0)
movedboolПризнак реального перемещения файла (false, если по каким-то причинам файл не был перемещен)

Пример использования:

SELECT * FROM pg_move_orphaned('1 minute'::interval);

Пример вывода:

-[ RECORD 1 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/PG_13_202305111/16801
name | 658459
dest_path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
size | 1449984
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
reloid | 0
moved | f
-[ RECORD 2 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/PG_13_202305111/16801
name | 658459_fsm
dest_path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
size | 24576
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
reloid | 0
moved | f
-[ RECORD 3 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/PG_13_202305111/16801
name | 658462
dest_path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
size | 917504
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658462
reloid | 0
moved | f
-[ RECORD 4 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465
dest_path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
size | 1073741824
mod_time | 2023-08-14 12:00:15+03
relfilenode | 658465
reloid | 0
moved | f
-[ RECORD 5 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465.1
dest_path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
size | 376176640
mod_time | 2023-08-14 12:00:18+03
relfilenode | 658465
reloid | 0
moved | f

Пример запуска функции:

SELECT pg_move_orphaned();
SELECT pg_move_orphaned('/pgdata/05/backup', true);
SELECT pg_move_orphaned('1 minute'::interval, true);
SELECT pg_move_orphaned('1 minute', '/pgdata/05/backup');

pg_remove_orphaned()

Функция выполняет окончательное удаление ранее перемещенных в карантинный каталог неиспользуемых файлов. Есть возможность передать путь к конкретному каталогу и числовой идентификатор (relfilenode) определенного файла (по умолчанию будет произведен поиск в каталогах табличных пространств).

Синтаксис:

pg_remove_orphaned(custom_backup_path text, custom_relfilenode text, nodryrun boolean)
RETURNS record

Входные параметры:

Название параметраТип значенияОписание
custom_backup_dirtextПуть к каталогу, где искать перемещенные файлы (по умолчанию используются каталоги табличных пространств)
custom_relfilenodetextЧисловой идентификатор (relfilenode) файла для удаления. При передаче обязателен параметр custom_backup_path
nodryrunbooleanРежим выполнения: false — только лог предполагаемых действий, true — фактическое удаление файлов

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
pathtextПуть к найденному файлу
nametextИмя найденного файла
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
removedboolПризнак реального удаления файла (false, если по каким-то причинам файл не был перемещен)

Заметки об использовании:

Внимание!

При передачеrelfilenode указание пути к каталогу является обязательным. По умолчанию функция не выполнит реальное удаление, а только вернет консольный лог предполагаемых действий. Для реального удаления файлов нужно передать true для аргумента nodryrun.

Пример использования:

SELECT * FROM pg_remove_orphaned(true);

Пример вывода:

-[ RECORD 1 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658459
size | 1449984
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
removed | t
-[ RECORD 2 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658459_fsm
size | 24576
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
removed | t
-[ RECORD 3 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658462
size | 917504
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658462
removed | t
-[ RECORD 4 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465
size | 1073741824
mod_time | 2023-08-14 12:00:15+03
relfilenode | 658465
removed | t
-[ RECORD 5 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465.1
size | 376176640
mod_time | 2023-08-14 12:00:18+03
relfilenode | 658465
removed | t

Также допустимы, например, такие вызовы функции:

SELECT pg_remove_orphaned();
SELECT pg_remove_orphaned('/pgdata/05/backup');
SELECT pg_remove_orphaned('/pgdata/05/backup', true);
SELECT pg_remove_orphaned('/pgdata/05/backup', '12345');
SELECT pg_remove_orphaned('/pgdata/05/backup', '12345', false);

pg_rollback_orphaned()

Функция позволяет осуществить восстановление ранее перемещенных в карантинный каталог неиспользуемых файлов. Есть возможность передать путь к конкретному каталогу и числовой идентификатор (relfilenode) определенного файла (по умолчанию будет произведен поиск в каталогах табличных пространств).

Синтаксис:

pg_rollback_orphaned (custom_backup_dir text, custom_relfilenode text, nodryrun boolean)
RETURN record

Входные параметры:

Название параметраТип значенияОписание
custom_backup_dirtextПуть к каталогу, где искать перемещенные файлы для восстановления (по умолчанию используются каталоги табличных пространств)
custom_relfilenodetextЧисловой идентификатор (relfilenode) файла для восстановления. При передаче обязателен параметр custom_backup_dir
nodryrunbooleanРежим выполнения: false — только лог предполагаемых действий, true — фактическое восстановление файлов

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
pathtextПуть к найденному файлу
nametextИмя найденного файла
dest_pathtextПуть для перемещения файла
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
reloidbigintoid отношения (для потерянных файлов 0)
movedboolПризнак реального перемещения файла (false, если по каким-то причинам файл не был перемещен)

Заметки об использовании:

Внимание!

При передачеrelfilenode указание пути к каталогу является обязательным. По умолчанию функция не выполнит реальное восстановление файлов, а только вернет консольный лог предполагаемых действий. Для реального восстановления файлов нужно передать true для аргумента nodryrun.

Пример использования:

SELECT pg_rollback_orphaned();

Пример вывода:

SELECT * FROM pg_rollback_orphaned() \gx
-[ RECORD 1 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658459
dest_path | pg_tblspc/16800/PG_13_202305111/16801
size | 1449984
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
reloid | 0
moved | f
-[ RECORD 2 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658459_fsm
dest_path | pg_tblspc/16800/PG_13_202305111/16801
size | 24576
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658459
reloid | 0
moved | f
-[ RECORD 3 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | 658462
dest_path | pg_tblspc/16800/PG_13_202305111/16801
size | 917504
mod_time | 2023-08-14 12:02:06+03
relfilenode | 658462
reloid | 0
moved | f
-[ RECORD 4 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465
dest_path | pg_tblspc/16800/PG_13_202305111/16801
size | 1073741824
mod_time | 2023-08-14 12:00:15+03
relfilenode | 658465
reloid | 0
moved | f
-[ RECORD 5 ]----------------------------------------------------------------------
dbname | First_db
path | pg_tblspc/16800/orphaned_backup/pg_tblspc/16800/PG_13_202305111/16801
name | t8_658465.1
dest_path | pg_tblspc/16800/PG_13_202305111/16801
size | 376176640
mod_time | 2023-08-14 12:00:18+03
relfilenode | 658465
reloid | 0
moved | f

Также допустимы, например, такие вызовы функции:

SELECT pg_rollback_orphaned(true);
SELECT pg_rollback_orphaned('/pgdata/05/backup');
SELECT pg_rollback_orphaned('/pgdata/05/backup', true);
SELECT pg_rollback_orphaned('/pgdata/05/backup', '12345');
SELECT pg_rollback_orphaned('/pgdata/05/backup', '12345', false);

pg_remove_temp_orphaned()

Функция выполняет поиск временных файлов в каталогах /base/pgtblspc и /pg_tblspc/tblspc_oid/pgsql_tmp (где tblspc_oid - это oid всех добавленных табличных пространств) и удаление «потерянных». Под «потерянными» понимаются файлы, предназначенные для размещения оперативных данных под операции, которые не поместились в оперативной памяти. Резервные копии для таких файлов не создаются. По умолчанию функция не выполнит реальное удаление, а только вернет консольный лог предполагаемых действий (список неиспользуемых временных файлов для удаления временных файлов). Для реального удаления файлов нужно передать true в аргументе nodryrun.

Синтаксис:

pg_remove_temp_orphaned(nodryrun boolean)
RETURNS record

Входные параметры:

Название параметраТип значенияОписание
nodryrunbooleanРежим выполнения: false — только лог предполагаемых действий (список файлов), true — фактическое удаление временных файлов

Возвращаемые значения:

Название поляТип значенияОписание
pathtextПуть к найденному файлу
nametextИмя найденного файла
sizebigintРазмер найденного файла
created_attimestamptzВремя создания найденного файла
removedboolПризнак реального удаления файла (false, если по каким-то причинам файл не был перемещен)

Пример использования:

SELECT * FROM pg_remove_temp_orphaned(true);

Пример вывода:

                   path                    |      name       |    size    |       created_at       | removed
-------------------------------------------+-----------------+------------+------------------------+---------
pg_tblspc/16800/PG_13_202305111/pgsql_tmp | pgsql_tmp1476.5 | 1073741824 | 2023-08-14 12:19:14+03 | t
pg_tblspc/16800/PG_13_202305111/pgsql_tmp | pgsql_tmp1476.6 | 1073741824 | 2023-08-14 12:19:50+03 | t
pg_tblspc/16800/PG_13_202305111/pgsql_tmp | pgsql_tmp1476.7 | 1073741824 | 2023-08-14 12:20:25+03 | t
pg_tblspc/16800/PG_13_202305111/pgsql_tmp | pgsql_tmp1476.8 | 1073741824 | 2023-08-14 12:21:02+03 | t
pg_tblspc/16800/PG_13_202305111/pgsql_tmp | pgsql_tmp1476.9 | 396681216 | 2023-08-14 12:21:15+03 | t
(5 rows)

pg_list_global_orphaned()

Функция поиска неиспользуемых файлов в системном табличном пространстве pg_global. Внешние операции с файлами в данном табличном пространстве несут гораздо более высокие риски, поэтому функции для работы с файлами в pg_global не создаются стандартным образом. Появление файлов в результате вывода данной функции является сигналом для администратора, а все остальные действия должны выполняться в ручном режиме и с большой осторожностью.

Синтаксис:

pg_list_global_orphaned()
RETURNS record

Входные параметры:

Отсутствует.

Возвращаемые значения:

Название поляТип значенияОписание
dbnametextИмя БД, в которой выполнен поиск
nametextИмя найденного файла
pathtextПуть к найденному файлу
sizebigintРазмер найденного файла
mod_timetimestamptzВремя последнего изменения найденного файла
relfilenodebigintЧисловое имя отношения
reloidbigintoid отношения (для потерянных файлов 0)

Пример использования:

SELECT pg_list_global_orphaned();