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;
Цим запитом ми дізнаємось, де у нас лежать табличні простори.
Вміст статті:
- Створюємо директорії.
- Призначаємо власника директорій.
- Зупиняємо базу даних.
- Дивимося посилання.
- Перенесення табличних просторів.
- Видаляємо старі посилання.
- Створюємо нові посилання.
- Запуск бази даних.
- Перевірка.
- Підсумки.
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
Посилання 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
8. Запускаємо базу даних.
$. pg_ctl start
9. Перевірка.
Після того, як ми все зробили, підключаємося до бази даних і виконаємо запит на перегляд усіх табличних просторів.
sql> SELECT oid, spcname, pg_tablespace_location(oid) FROM pg_tablespace;
Як бачимо на скріншоті в результаті директорія з /u01 успішно змінилася на /u02, а значить ми все зробили правильно.
10. Підсумки.
У підсумки колеги ми сьогодні успішно проробили таку операцію як перенесення табличних просторів в іншу директорію, і після того, як ми все зробили та перевірили, то тепер можна стару директорію з табличними просторами видаляти.
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.