PostgreSQL - Как определить к каким файлам на диске соответствуют таблицы в базе данных
Коллеги всем привет.
В сегодняшней статье мы поговорим о том как можно найти конкретный файл в директории где у вас установлена ваша базы данных, который относится к одной из таблиц в базе данных PostgreSQL.
Иногда в работе специалиста администратора баз данных необходимо определять к какому файлу на диске соответствует таблица в базе данных. По умолчанию все таблицы базы данных хранятся по пути $PGDATA/base.
Задача определить имя файла по названию таблицы может возникнуть во многих случаях, один из таких случаев может быть то что вы можете у себя в лог файле увидеть такую ошибку:
ERROR: could not read block 22342 of relation base/16384/16388: read only 0 of 8192 bytes
Чтобы решить данную задачу и найти отношения между таблицей в базе данных и файлом на вашем сервере мы можем воспользоваться специальной функцией которая поставляется вместе c СУБД PostgreSQL. Функция называется pg_relation_filepath. Функция pg_relation_filepath принимает один параметр, это имя таблицы которая существует в базе данных. В случаи успеха функция вернут относительный путь к файлу.
Прежде чем использовать функцию, нам нужно подключиться к конкретной базу данные, а уже потом использовать функцию.
psql> SELECT pg_relation_filepath('random_number');
В результате мы получили все файлы которые относятся к таблице random_number.
Вдруг если вы хотите наоборот узнать имя таблицы по имени файлу то существует другая функция которая называется pg_filenode_relation. Функция pg_filenode_relation принимает два параметра, первый это табличное пространство, а вторым параметром это имя файла.
psql> SELECT pg_filenode_relation(0,16388);
Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.