Переміщення даних postgresql на інший диск


20

Я використовую AWS як моє хмарне середовище. Я встановив PostgreSQL на тому самому диску, що й мій кореневий екземпляр. Я приєднав і встановив другий диск до свого примірника. Тепер я хочу перемістити всі мої дані PostgreSQL на інший диск. Я все ще перебуваю в режимі розробки, тому я можу видалити старі дані, якщо це полегшує передачу в цей час. Який найкращий спосіб зробити це?

Чи є те, що я повинен дивитись у просторі таблиць PostgreSQL?


1
Простори таблиць - це шлях, якщо ви хочете перемістити частину вашої бази даних на окремий диск.
Ервін Брандстеттер

Ця відповідь говорить про те, що НЕtablespaces слід переходити на зовнішній жорсткий диск: dba.stackexchange.com/a/62037/41823 Не впевнений, що я розумію ризик, якщо ви вже розміщуєте дані на зовнішньому?
Statwonk

Відповіді:


19

Слід зробити це:

  1. Вимкніть PostgreSQL
  2. Переконайтеся, що PostgreSQL більше не працює
  3. Перевірте, чи дійсно зупинено PostgreSQL
  4. Скопіюйте старий каталог даних на новий диск.
    Зазвичай це визначається через параметр командного рядка ( -D) для вашої служби або через PGDATAзмінну середовища.
  5. Оновіть конфігурацію PostgreSQL (сервіс, середовище var), щоб вказати на новий каталог даних.
  6. Якщо ви скопіювали дані, перейменуйте старий каталог даних, щоб переконатися, що PostgreSQL більше не може їх знайти. Таким чином ви отримаєте повідомлення про помилку, якщо ви не отримали правильну конфігурацію.
  7. Запустіть послугу
  8. Якщо все працює нормально, ви можете видалити старий каталог.

У четвертому пункті, що ви маєте на увазі під «Це зазвичай визначається через параметр командного рядка ...»?
codecool

@codecool: Існує кілька різних способів, як це можна визначити. Зазвичай це частина визначення послуги. Але це залежить від вашої операційної системи, розповсюдження та особистих змін.
a_horse_with_no_name

Це спрацювало, але я використовував regedit замість командного рядка для Windows. Вау. На моєму диску майже не вистачило місця, але тепер я безпечно працюю в іншому місці з достатньою кількістю місця.
траншея

Ось приємна покрокова публікація в блозі з конкретними подробицями, актуальною для типової версії ubuntu та версії 9.5 БД: digitalocean.com/community/tutorials/…
JaakL

4
  1. Припинення послуги postgresql
  2. cp -a source_data_directory призначення_data_directory
  3. chown -R postgres_user / destina_data_directory
  4. експортувати PGDATA = target_data_directory
  5. Зміна каталогу даних до destina_data_directory в межах postgresql.conf
  6. pg_ctl start

Я радий, що ти згадав chownкоманду для нової папки.
RolandoMySQLDBA

0

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

pg_dumpallце утиліта для запису (скидання) всіх баз даних PostgreSQL кластеру в один файл сценарію. ... Це робиться за допомогою виклику pg_dumpкожної бази даних в кластері. ...

Наприклад:

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

Тобі потрібно:

  • export ( pg_dumpall) база даних
  • створити новий каталог EMPTY
  • редагувати файл postgresql.conf
  • перезапустити сервер postgres сервера
  • завантажувати старі дані з дамп-файлу в нову базу даних

Підсумок команд

Я залишаю підказки оболонки (ім'я хоста ...), щоб уточнити, в якій оболонці я перебуваю.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

Приклад

Дивіться мою супровідну публікацію в блозі " Як перемістити існуючу базу даних PostgreSQL в Arch Linux" для коментованого коду та виводу .---


Список літератури

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.