Перемещение данных postgresql на другой диск

20

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

Является ли табличное пространство PostgreSQL чем-то, на что я должен обратить внимание?

codecool
источник
1
Табличные пространства были бы подходящим вариантом, если вы хотите переместить часть вашей базы данных на отдельный диск.
Эрвин Брандштеттер
Этот ответ говорит о том , что tablespacesследует НЕ идти на внешний жесткий диск: dba.stackexchange.com/a/62037/41823 Не уверен , что я понимаю риск , если вы уже положить данные на внешний?
Statwonk

Ответы:

19

Следующие должны сделать это:

  1. Выключить PostgreSQL
  2. Убедитесь, что PostgreSQL больше не работает
  3. Проверьте, что PostgreSQL действительно остановлен
  4. Скопируйте старый каталог данных на новый диск.
    Обычно это определяется параметром командной строки ( -D) для вашей службы или PGDATAпеременной среды.
  5. Обновите конфигурацию PostgreSQL (service, environment var), чтобы она указала на новый каталог данных.
  6. Если вы скопировали данные, переименуйте старый каталог данных, чтобы PostgreSQL больше не мог его найти. Таким образом, вы получите сообщение об ошибке, если не правильно настроили конфигурацию.
  7. Запустить сервис
  8. Если все работает нормально, вы можете удалить старый каталог.
a_horse_with_no_name
источник
В четвертом пункте, что вы подразумеваете под «Это обычно определяется параметром командной строки ...»?
Codecool
@codecool: есть несколько разных способов, как это можно определить. Обычно это часть определения сервиса. Но это зависит от вашей операционной системы, дистрибутива и личных изменений.
a_horse_with_no_name
Это сработало, но я использовал regedit вместо командной строки для Windows. Уф. На моем диске почти заканчивалось свободное место, но теперь он безопасно работает в другом месте с достаточным пространством.
траншея
Вот хороший шаг за шагом блога с конкретными деталями, уточненный для типичного убунту и 9,5 DB версии: digitalocean.com/community/tutorials/...
JaakL
4
  1. Остановить службу postgresql
  2. cp -a source_data_directory destination_data_directory
  3. chown -R postgres_user / destination_data_directory
  4. export PGDATA = destination_data_directory
  5. Изменение каталога данных на destination_data_directory в postgresql.conf
  6. начало pg_ctl
ади
источник
Я рад, что вы запомнили 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

Тебе нужно:

  • pg_dumpallбаза данных export ( )
  • создать новый каталог 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 , для прокомментированного кода и вывода .---


Ссылки

Виктория Стюарт
источник