Функции для очистки неиспользуемых файлов в табличных пространствах
Функции, представленные в данном разделе, реализованы в рамках поставляемого расширения pg_orphaned для очистки неиспользуемых файлов в табличных пространствах.
В функциях расширения реализован механизмdryrun, все действия с файлами можно запустить без реального выполнения (что является поведением по умолчанию) для предварительного анализа работы с данными. Чтобы выполнить действие с файлами, необходимо передать параметр true в аргументе nodryrun (значение по умолчанию - false). Все функции расширения доступны только суперпользователю, ограничение введено на уровне кода, выдать права на функции другим пользователям нельзя.
pg_list_orphaned()
Функция осуществляет поиск неиспользуемых файлов и вывод в консоль их списка.
Синтаксис:
pg_list_orphaned(older_than interval)
RETURNS record
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
older_than | interval | Временной интервал (значение по умолчанию - 1 сутки), файлы старше которого будут дополнительно отмечены |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
reloid | bigint | oid отношения (для потерянных файлов 0) |
older | bool | Флаг, показывающий старше или нет файл переданного в функцию интервала |
Пример использования:
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_path | text | Путь до каталога, в котором будет выполнен поиск (необязательный параметр, по умолчанию поиск будет осуществлен в каталогах табличных пространств каталога orphand_backup) |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
reloid | bigint | oid отношения (для потерянных файлов 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_than | interval | Временной интервал (значение по умолчанию - 1 сутки) |
custom_backup_path | text | Путь к пользовательскому каталогу для перемещения найденных файлов. Если не указан — используется стандартный каталог в табличных пространствах |
nodryrun | boolean | Режим выполнения: false — только поиск и вывод найденных файлов (без перемещения), true — фактическое перемещение файлов |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
dest_path | text | Путь для перемещения файла |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
reloid | bigint | oid отношения (для потерянных файлов 0) |
moved | bool | Признак реального перемещения файла (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_dir | text | Путь к каталогу, где искать перемещенные файлы (по умолчанию используются каталоги табличных пространств) |
custom_relfilenode | text | Числовой идентификатор (relfilenode) файла для удаления. При передаче обязателен параметр custom_backup_path |
nodryrun | boolean | Режим выполнения: false — только лог предполагаемых действий, true — фактическое удаление файлов |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
removed | bool | Признак реального удаления файла (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_dir | text | Путь к каталогу, где искать перемещенные файлы для восстановления (по умолчанию используются каталоги табличных пространств) |
custom_relfilenode | text | Числовой идентификатор (relfilenode) файла для восстановления. При передаче обязателен параметр custom_backup_dir |
nodryrun | boolean | Режим выполнения: false — только лог предполагаемых действий, true — фактическое восстановление файлов |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
dest_path | text | Путь для перемещения файла |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
reloid | bigint | oid отношения (для потерянных файлов 0) |
moved | bool | Признак реального перемещения файла (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
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
nodryrun | boolean | Режим выполнения: false — только лог предполагаемых действий (список файлов), true — фактическое удаление временных файлов |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
path | text | Путь к найденному файлу |
name | text | Имя найденного файла |
size | bigint | Размер найденного файла |
created_at | timestamptz | Время создания найденного файла |
removed | bool | Признак реального удаления файла (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
Входные параметры:
Отсутствует.
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
dbname | text | Имя БД, в которой выполнен поиск |
name | text | Имя найденного файла |
path | text | Путь к найденному файлу |
size | bigint | Размер найденного файла |
mod_time | timestamptz | Время последнего изменения найденного файла |
relfilenode | bigint | Числовое имя отношения |
reloid | bigint | oid отношения (для потерянных файлов 0) |
Пример использования:
SELECT pg_list_global_orphaned();