PostgreSQL - Як перенести табличний простір

  • Останнє оновлення: 3 Квітня 2024 р.
  • Перегляди: 24
  • Автор: Адмін
PostgreSQL - Як перенести табличний простір

Колеги всім привіт.

У сьогоднішній статті ми поговоримо про те, як можна перенести табличні простори в інший розділ на сервері в PostgreSQL.

Перенесення табличних просторів до інших місць може знадобитися з кількох причин. Перша причина це те, що у вас може закінчитися місце на диску, і вийде так що поточний розділ де у вас лежить табличний простір розширити засобами Linux не виходить і доведеться тимчасово і на постійній основі перенести табличний простір в інший розділ. Друга причина пов'язана з оптимізацією бізнес процесів самої бази даних. Наприклад ви на сервер підключили швидкий SSD диск, і потрібно на цей диск перенести табличний простір в якому знаходяться таблиці до яких потрібен швидкий доступ на читання та запис.

 

У сьогоднішньому прикладі ми переноситимемо табличні простори на ім'я inzhener_1 та inzhener_2 з директорії /u01/pg_tablespace в /u02/pg_tablespace.

sql> SELECT oid, spcname, pg_tablespace_location(oid) FROM pg_tablespace;

postgresql moving tablespace

Цим запитом ми дізнаємось, де у нас лежать табличні простори.

 

Вміст статті:

  1. Створюємо директорії.
  2. Призначаємо власника директорій.
  3. Зупиняємо базу даних.
  4. Дивимося посилання.
  5. Перенесення табличних просторів.
  6. Видаляємо старі посилання.
  7. Створюємо нові посилання.
  8. Запуск бази даних.
  9. Перевірка.
  10. Підсумки.

 

1. Створюємо директорії.

Перше з чого потрібно почати так це створити необхідні директорії для табличних просторів засобами операційної системи Linux.

$. mkdir -p /u02/pg_tablespace/inzhener_1

$. mkdir -p /u02/pg_tablespace/inzhener_2


 

2. Призначаємо власника директорій.

Після того, як ми створили директорії наступною дією, нам потрібно обов'язково призначити власником цих директорій користувача postgres.

$. chown -R postgres:postgres /u02/pg_tablespace/inzhener_1

$. chown -R postgres:postgres /u02/pg_tablespace/inzhener_2


 

3. Зупиняємо базу даних.

Перед перенесенням табличних просторів обов'язково потрібно зупинити базу даних.

$. pg_ctl stop


 

4. Дивимося посилання.

Всі посилання в базі даних PostgreSQL які пов'язані з табличними просторами знаходяться в директорії $PGDATA/pg_tblspc, у моєму випадку повний шлях /app/postgresql/15/pg_dbcluster_1/data/pg_tbl

$. ls -l /app/postgresql/15/pg_dbcluster_1/data/pg_tblspc

postgresql moving tablespace

Посилання 16405 та 16406 та шляхи до директорій нам потрібно запам'ятати або записати кудись, оскільки після перенесення табличних просторів ми будемо їх перепризначати з такими ж іменами. ЦЕ ВАЖЛИВО!


 

5. Перенесення табличних просторів.

Тепер настала черга на перенесення наших табличних просторів у наші нові директорії. Для того, щоб це зробити, ми будемо використовувати команду Linux - cp.

$. cp -r /u01/pg_tablespace/inzhener_1/* /u02/pg_tablespace/inzhener_1

$. cp -r /u01/pg_tablespace/inzhener_2/* /u02/pg_tablespace/inzhener_2


 

6. Видаляємо старі посилання.

Тепер нам потрібно видалити старі посилання.

$. rm 16405

$. rm 16406


 

7. Створюємо нові посилання.

Тепер замість старих посилань нам потрібно створити нові із зазначенням на нові директорії, які ми створили і туди перенесли табличні простори.

$. ln -s /u02/pg_tablespace/inzhener_1 16405

$. ln -s /u02/pg_tablespace/inzhener_2 16406

Перевірка.

$. ls -l /app/postgresql/15/pg_dbcluster_1/data/pg_tblspc

postgresql moving tablespace


 

8. Запускаємо базу даних.

$. pg_ctl start


 

9. Перевірка.

Після того, як ми все зробили, підключаємося до бази даних і виконаємо запит на перегляд усіх табличних просторів.

sql> SELECT oid, spcname, pg_tablespace_location(oid) FROM pg_tablespace;

postgresql moving tablespace

Як бачимо на скріншоті в результаті директорія з /u01 успішно змінилася на /u02, а значить ми все зробили правильно.


 

10. Підсумки.

У підсумки колеги ми сьогодні успішно проробили таку операцію як перенесення табличних просторів в іншу директорію, і після того, як ми все зробили та перевірили, то тепер можна стару директорію з табличними просторами видаляти.


 

Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.

 

СХОЖІ СТАТТІ

Postgresql - Автоматичний запуск бази даних
PostgreSQL додати файл конфігурації - include_if_exists