Как перенести базу postgresql на другой диск?
переношу базу postgresql 15 версии в centos 9 на другой диск по данной статье https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-22-04#step-3-restarting-postgresql . Пытаюсь сделать все скриптом. Остановился на запуске службы sudo systemctl start postgresql с такой ошибкой:
× postgresql-15.service - PostgreSQL 15 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; preset: disabled) Active: failed (Result: exit-code) since Sun 2023-06-04 21:10:55 +08; 22s ago Docs: https://www.postgresql.org/docs/15/static/ Process: 10980 ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir $ (code=exited, status=1/FAILURE) CPU: 16ms июн 04 21:10:55 asus systemd[1]: Starting PostgreSQL 15 database server. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: "/var/lib/pgsql/15/data/" is missing or empty. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: Use "/usr/pgsql-15/bin/postgresql-15-setup initdb" to initialize the database cluster. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: See /usr/share/doc/postgresql15/README.rpm-dist for more information. июн 04 21:10:55 asus systemd[1]: postgresql-15.service: Control process exited, code=exited, status=1/FAILURE июн 04 21:10:55 asus systemd[1]: postgresql-15.service: Failed with result 'exit-code'. июн 04 21:10:55 asus systemd[1]: Failed to start PostgreSQL 15 database server.
Перенос базы Postgresql на другой диск
Жил был сервис, и была у него база, и жила она в /var/lib/postgresql на основном диске. И стала база занимать почти весь диск.
Ну и мы не лыком шиты, перенесем ее на отдельный диск.
План такой:
- Добавляем новый диск
- Монтируем его в какую-то папку
- Переносим туда БД
- Тут, возможно, мы захотим жить в новой директории — тогда поменяем конфиг.
- Прячем текущую папку /var/lib/postgresql
- Монтируем наш диск вместо старой папки
Готовим диск
Представим, что мы уже добавили диск в гипервизоре и видим его в выводе lsblk :
admin@host.infra.domain.local:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 99.2M 1 loop /snap/core/10908 loop1 7:1 0 99.2M 1 loop /snap/core/10859 sda 8:0 0 550G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 550G 0 part / sdb 8:16 0 1000G 0 disk
Теперь разметим его с помощью parted :
parted /dev/sdb mklabel gpt unit s mkpart primary ext4 0% 100% quit
Отформатируем раздел в ext4:
mkfs.ext /dev/sdb1
Монтируем диск
Сначала создадим левую папку, куда мы примонтируем новый раздел и будем перекидывать базу mkdir /tempdb .
☝️ Хорошим тоном считается добавлять в /etc/fstab записи с UUID диска, а не /dev/sdb1.
Дальше посмотрим UUID нашего раздела. Даем команду blkid :
/dev/sda2: UUID="b651b0ae-ef1d-11e9-be07-005056926860" TYPE="ext4" PARTUUID="1cd39f87-c0cd-f24d-baff-a39ff152be09" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9" TYPE="ext4" PARTLABEL="primary" PARTUUID="4d0987b3-0010-434c-aac4-b42ba2a75582"
Вот же он: /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9"
Теперь добавляем строку в файл /etc/fstab , можно руками через vi/nano, можно echo-м:
echo 'UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /tempdb ext4 defaults 0 0' >> /etc/fstab
После этого делаем mount -a . Раздел примонтирован в новую папку.
Перенос базы
Сначала остановим сервис systemctl stop postgresql , чтобы во время копирования не записывались свежие данные.
Начинаем копировать данные:
rsync -arv /var/lib/postgres/ /tempdb
и ждем. У меня база на 500Гб копировалась два часа, но всё зависит от железа, самой базы, фазы луны и дня недели.
На этом этапе мы можем изменить путь к базе в конфигурационном файле postgresql и запустить сервис, всё будет работать. Для этого редактируем файл /etc/postgres/10/main/postgresql.conf и меняем пусть к директории в строке:
data_directory = '/tempdb/10/main'
Но если мы не хотим менять папку в конфиге Постгреса, то нужно спрятать старую базу, ведь мы не хотим ее сразу удалять, вдруг понадобится.
mkdir /var/oldpostgres && mv /var/lib/postgres/ /var/oldpostgres
Теперь проверим, что мы не напутали с папками и /var/lib/postgresql на месте. Если нет - mkdir /var/lib/postgresql .
Размонтируем диск umount /tembdb , а затем заходим в nano /etc/fstab и редактируем строку с подключением. Нам нужно изменить точку монтирования. Должно получиться так:
UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /var/lib/postgresql ext4 defaults 0 0
☝️ Не забудь, что UUID у тебя будет свой уникальный
Делаем mount -a и пробуем запустить сервис systemctl start postgresql .
Проверяем
Как проверить? Ну например netstat -tulpn | grep 5432 , и если у вас постгрес на стандартном порту, должен быть вывод, вроде:
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 225199/postgres tcp6 0 0 . 5432 . * LISTEN 225199/postgres
Можно попробовать зайди в базу sudo -u postgres psql :
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
Если всё ок, можно удалить старую базу, чтобы освободить место в корне.
Если вам нравятся мои посты, то подписывайтесь также:
Как перенести базу postgresql на другой диск?
привет. переношу базу postgresql 15 версии в centos 9 на другой диск по данной статье https://www.digitalocean.com/community/tutorials/h. .
Пытаюсь сделать все скриптом. Остановился на запуске службы sudo systemctl start postgresql с такой ошибкой:
× postgresql-15.service - PostgreSQL 15 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; preset: disabled) Active: failed (Result: exit-code) since Sun 2023-06-04 21:10:55 +08; 22s ago Docs: https://www.postgresql.org/docs/15/static/ Process: 10980 ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir $ (code=exited, status=1/FAILURE) CPU: 16ms июн 04 21:10:55 asus systemd[1]: Starting PostgreSQL 15 database server. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: "/var/lib/pgsql/15/data/" is missing or empty. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: Use "/usr/pgsql-15/bin/postgresql-15-setup initdb" to initialize the database cluster. июн 04 21:10:55 asus postgresql-15-check-db-dir[10980]: See /usr/share/doc/postgresql15/README.rpm-dist for more information. июн 04 21:10:55 asus systemd[1]: postgresql-15.service: Control process exited, code=exited, status=1/FAILURE июн 04 21:10:55 asus systemd[1]: postgresql-15.service: Failed with result 'exit-code'. июн 04 21:10:55 asus systemd[1]: Failed to start PostgreSQL 15 database server.
а вот код команды который пытаюсь выполнить в пункте 4: https://github.com/David138it/Bash-Scripts/blob/ma.
как можно решить такую проблему? единственное заметил, что отличие от статьи в том что конфигурация файла postgresql находится в другом месте, очевидно из-за того что в статье centos другой версии 6/7/8.
- Вопрос задан 04 июн. 2023
- 1215 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2

Миллиардер, филантроп, патологический лгун
Перенесите на другой диск, а в старом каталоге оставьте симлинк - тогда и перенастраивать ничего не придётся.
Как перенести базу данных PostgreSQL на другой диск в Windows
База данных PostgreSQL является одной из самых популярных и надежных систем управления базами данных. Она обладает множеством возможностей и широким функционалом. Одной из основных задач администратора СУБД является перенос базы данных на другой диск.
Перенос базы данных PostgreSQL на другой диск Windows может быть необходим, если текущий диск заполнился, или для увеличения скорости доступа к данным. В этой статье мы рассмотрим пошаговую инструкцию по переносу базы данных PostgreSQL на другой диск в операционной системе Windows.
Шаг 1. Создание нового диска и размещение базы данных
В первую очередь, необходимо создать новый диск на компьютере и разместить на нем папку для базы данных PostgreSQL. Новый диск может быть физическим (жесткий диск или SSD) или виртуальным (образ диска или виртуальная машина).
Шаг 2. Остановка PostgreSQL
Перед переносом базы данных необходимо остановить PostgreSQL, чтобы избежать возможной потери данных или повреждения базы данных.
Шаг 3. Копирование базы данных
Теперь нужно скопировать содержимое текущей папки с базой данных PostgreSQL на новый диск. Для этого можно воспользоваться инструментами операционной системы Windows или специальными программами для копирования файлов.
Шаг 4. Изменение пути к базе данных в конфигурационном файле
После копирования базы данных необходимо отредактировать конфигурационный файл PostgreSQL, чтобы указать новый путь к папке с базой данных на новом диске.
Шаг 5. Запуск PostgreSQL и проверка работоспособности
После внесения изменений в конфигурационный файл нужно запустить PostgreSQL и проверить, что база данных работает корректно на новом диске. Для этого можно выполнить тестовые запросы к базе данных или запустить приложение, которое использует PostgreSQL.
Следуя этой пошаговой инструкции, вы сможете успешно перенести базу данных PostgreSQL на другой диск в операционной системе Windows. Однако, перед выполнением переноса рекомендуется сделать резервную копию базы данных, чтобы в случае ошибки можно было восстановить данные.
Перенос базы данных PostgreSQL на другой диск Windows
В этом руководстве мы рассмотрим пошаговую инструкцию по переносу базы данных PostgreSQL на другой диск в операционной системе Windows. Эта процедура полезна, если у вас заканчивается свободное место на диске, на котором расположена ваша база данных.
Шаг 1: Создание резервной копии базы данных
Перед началом процесса переноса базы данных рекомендуется создать резервную копию базы данных PostgreSQL. Для этого вы можете использовать команду pg_dump , которая создаст дамп базы данных в файле.
Выполните следующую команду в командной строке для создания резервной копии базы данных:
pg_dump -U имя_пользователя -d имя_базы_данных > дамп.sql
Здесь имя_пользователя — имя пользователя PostgreSQL, имеющего привилегии для доступа к базе данных, имя_базы_данных — имя базы данных, которую вы хотите перенести, а дамп.sql — файл, в который будет сохранен дамп базы данных.
Шаг 2: Создание нового каталога на другом диске
Создайте новый каталог на другом диске, на который вы хотите перенести базу данных. Например, вы можете создать каталог D:\pg_data .
Шаг 3: Копирование файлов базы данных
Перейдите в каталог с установленной PostgreSQL (обычно этот каталог находится в C:\Program Files\PostgreSQL ) и найдите каталог с названием вашей базы данных. Например, если ваша база данных называется «mydb», найдите каталог C:\Program Files\PostgreSQL\data\base\12345 , где 12345 — идентификатор вашей базы данных.
Скопируйте все файлы и подкаталоги из каталога с базой данных в каталог, созданный на другом диске в предыдущем шаге.
Шаг 4: Изменение файла конфигурации
Откройте файл postgresql.conf , который находится в каталоге с установленной PostgreSQL ( C:\Program Files\PostgreSQL\data ), с помощью текстового редактора.
Найдите параметр data_directory и измените его значение на путь к новому каталогу на другом диске. Например:
Сохраните изменения в файле postgresql.conf .
Шаг 5: Перезапуск службы PostgreSQL
Перезапустите службу PostgreSQL для применения внесенных изменений. Вы можете сделать это, открыв службы Windows и найдя службу PostgreSQL, затем нажав правой кнопкой мыши и выбрав «Перезапустить».
Шаг 6: Проверка работоспособности новой базы данных
После перезапуска службы PostgreSQL проверьте работоспособность новой базы данных, выполнив запросы и обращая внимание на возможные ошибки или проблемы.
Обратите внимание, что весь процесс переноса базы данных должен быть выполнен с осторожностью и делать резервные копии всех данных до внесения изменений важно для предотвращения потери данных.
Поздравляем! Вы успешно перенесли базу данных PostgreSQL на другой диск в операционной системе Windows.
Почему может понадобиться перенос базы данных PostgreSQL на другой диск?
Перенос базы данных PostgreSQL на другой диск может понадобиться по нескольким причинам:
| Освобождение места на текущем диске | Если на текущем диске заканчивается свободное место, то перенос базы данных на другой диск может помочь освободить место и избежать нехватки ресурсов. |
| Улучшение производительности | Перенос базы данных на более быстрый или менее загруженный диск может привести к улучшению производительности при выполнении запросов и обработке данных. |
| Резервное копирование и восстановление | Перенос базы данных на другой диск может быть необходим для создания резервной копии и последующего восстановления данных. Это обеспечивает более надежную защиту данных на случай сбоев или повреждений. |
| Расширение пространства хранения | Если текущий диск исчерпал свой лимит по объему данных, перенос базы данных на другой диск может позволить расширить пространство хранения и продолжить работу с базой данных без ограничений. |
Необходимость переноса базы данных PostgreSQL на другой диск может возникнуть в различных ситуациях в зависимости от конкретных потребностей и требований к системе.
Подготовка к переносу базы данных PostgreSQL на другой диск
Перенос базы данных PostgreSQL на другой диск требует определенных подготовительных шагов для обеспечения успешной миграции данных. В этом разделе мы рассмотрим необходимые действия, которые нужно выполнить перед переносом базы данных.
1. Создание резервной копии базы данных:
Прежде чем начать перенос базы данных, рекомендуется создать резервную копию данных. Это поможет вам восстановить базу данных в случае возникновения проблем во время миграции.
Вы можете создать резервную копию базы данных, используя команду pg_dump. Например:
pg_dump -U username -d dbname -f backup.sql
Здесь username — ваше имя пользователя PostgreSQL, dbname — название базы данных, backup.sql — путь и имя файла, в который будет сохранена резервная копия.
Убедитесь, что созданная резервная копия была сохранена в надежном и доступном месте.
2. Закрытие всех сеансов подключения к базе данных:
Перед переносом данных необходимо закрыть все активные сеансы подключения к базе данных. Это позволит предотвратить возникновение ошибок при копировании данных.
Вы можете использовать команду pg_terminate_backend, чтобы принудительно завершить все активные сеансы подключения к базе данных. Например:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'dbname';
Здесь dbname — название базы данных, для которой нужно завершить все активные сеансы подключения.
3. Определение места назначения для базы данных:
Прежде чем перенести базу данных, необходимо определить новое место назначения для данных. Обычно это другой диск или раздел на том же диске.
Убедитесь, что новое место назначения имеет достаточно свободного места для хранения данных базы данных.
4. Остановка службы PostgreSQL:
Перед переносом данных необходимо остановить службу PostgreSQL. Вы можете использовать команду pg_ctl для остановки службы. Например:
pg_ctl stop -D "C:\Program Files\PostgreSQL\12\data"
Здесь путь "C:\Program Files\PostgreSQL\12\data" — путь к каталогу данных PostgreSQL на вашей системе. Убедитесь, что он указывает на текущий путь к вашей базе данных.
После остановки службы PostgreSQL вы можете перейти к переносу базы данных на другой диск.
Создание резервной копии базы данных PostgreSQL
Перед тем, как перенести базу данных PostgreSQL на другой диск, рекомендуется создать резервную копию. В случае возникновения проблем при переносе, вы сможете восстановить базу данных с помощью этой копии.
В PostgreSQL существует несколько способов создания резервных копий. Рассмотрим два наиболее распространенных способа.
- Использование команды pg_dump
- Использование утилиты pgAdmin
Использование команды pg_dump
1. Откройте командную строку ПК:
Нажмите клавишуWin + R, введитеcmdи нажмите Enter.
2. В командной строке перейдите в папку, в которой установлен PostgreSQL:
cd C:\Program Files\PostgreSQL\>\bin
Замените «>» на версию PostgreSQL, установленную на вашем компьютере.
3. Создайте резервную копию базы данных с помощью следующей команды:
pg_dump.exe -U > -d > -f >
Замените «>» на имя пользователя, «>» на имя базы данных, и «>» на путь и имя файла, в который будет сохранена резервная копия.
pg_dump.exe -U postgres -d mydatabase -f C:\backup\mydatabase.backup
Использование утилиты pgAdmin
1. Запустите утилиту pgAdmin.
2. Выберите сервер, на котором находится база данных.
3. Щелкните правой кнопкой мыши на базе данных, для которой нужно создать резервную копию, и выберите пункт «Backup».
4. Укажите путь и имя файла для сохранения резервной копии.
5. Нажмите кнопку «Backup» для создания резервной копии.
Оба способа создания резервной копии базы данных PostgreSQL являются надежными и удобными. Выберите тот, который вам больше подходит, и сохраните резервную копию перед переносом базы данных на другой диск.
Создание новой базы данных на другом диске Windows
Чтобы создать новую базу данных на другом диске Windows, следуйте этим шагам:
- Откройте командную строку Windows.
- Перейдите в каталог, где находится установленный PostgreSQL.
- Введите команду «cd bin» и нажмите Enter, чтобы перейти в каталог bin.
- Введите команду «initdb -D D:\path\to ew\database» и нажмите Enter, чтобы создать новую базу данных. Замените «D:\path\to ew\database» на путь к новому каталогу базы данных.
- Дождитесь завершения процесса и закройте командную строку.
После выполнения этих шагов вы успешно создадите новую базу данных на другом диске Windows. Теперь вы можете использовать эту базу данных для хранения своих данных.
Восстановление базы данных PostgreSQL на новом диске
Если вы уже переместили базу данных PostgreSQL на новый диск с помощью предыдущей инструкции, вам необходимо восстановить базу данных на новом диске.
Чтобы восстановить базу данных PostgreSQL на новом диске, выполните следующие шаги:
- Откройте командную строку и перейдите в папку, где находятся файлы резервных копий базы данных.
- Введите команду pg_restore --dbname=название_базы_данных --verbose имя_файла_резервной_копии . Замените название_базы_данных на имя вашей базы данных и имя_файла_резервной_копии на имя файла резервной копии базы данных.
- Дождитесь завершения процесса восстановления базы данных. Во время восстановления вы будете видеть информацию о восстановлении каждой таблицы.
- После завершения восстановления базы данных можно открыть новую версию PostgreSQL и проверить, что данные успешно восстановлены на новый диск.
Убедитесь, что выполнение команды прошло успешно без ошибок. Если возникли ошибки, проверьте правильность указания имени базы данных и имени файла резервной копии.
Теперь вы успешно восстановили базу данных PostgreSQL на новом диске. Вы можете продолжить работу с вашей базой данных с нового диска.