PostgreSQL - Як визначити, до яких файлів на диску відповідають таблиці в базі даних
- Останнє оновлення: 3 Листопада 2023 р.
- Перегляди: 144
- Автор: Адмін
Колеги всім привіт.
У сьогоднішній статті ми поговоримо про те, як можна знайти конкретний файл у директорії де у вас встановлена ваша база даних, який відноситься до однієї з таблиць у базі даних PostgreSQL.
Іноді в роботі спеціаліста адміністратора баз даних необхідно визначати, до якого файлу на диску відповідає таблиця в базі даних. За замовчуванням усі таблиці бази даних зберігаються шляхом $PGDATA/base.
Завдання визначити ім'я файлу за назвою таблиці може виникнути в багатьох випадках, один з таких випадків може бути те що ви можете у себе в лог файлі побачити таку помилку:
ERROR: could not read block 22342 of relation base/16384/16388: read only 0 of 8192 bytes
Щоб вирішити це завдання і знайти відносини між таблицею в базі даних і файлом на вашому сервері ми можемо скористатися спеціальною функцією, яка постачається разом з СУБД 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);
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.