Если у вас установлен Postgres в конфигурации по умолчанию, то его базы хранятся в Program Files. Если есть необходимость освободить место на системном диске C, то можно перенести базы данных Postgres на другой диск. Общий алгоритм такой (включая linux системы):
- Останавливаем сервис СУБД
- Перемещаем базы
- Меняем конфиг postgres
- Запускаем сервис СУБД
Для Windows системы:
- Заходим в сервисы
Нажимаем WIN+R, и вводим командуservices.msc
Отключаем службу, относяющуюся к СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6. В свойствах службы можно посмотреть команду запуска.
В сущности необходимо будет поменять параметр после ключа -D
- Заходим в реестр
Нажимаем WIN+R, и вводим командуregedit
Ищем ветку служб Windows и наш сервис СУБД, например postgresql-x64-9.6 — PostgreSQL Server 9.6
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services
- Меняем ключ реестра ImagePath.
Допустим надо указать папку D:\databases\PostgreSQL\9.6. Тогда, вместо
"C:\Program Files\PostgreSQL\9.6\bin\pg_ctl.exe" runservice -N "postgresql-x64-9.6" -D "C:\Program Files\PostgreSQL\9.6\data" -w
прописываем:
"C:\Program Files\PostgreSQL\9.6\bin\pg_ctl.exe" runservice -N "postgresql-x64-9.6" -D "D:\databases\PostgreSQL\9.6" -w
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу
Для linux системы:
- Отключаем службу, относяющуюся к СУБД
/etc/init.d/postgresql stop
- В конфигурационном файле /etc/init.d/postgresql меняем содержимое переменной $PGDATA
- Копируем/перемещаем базы из старого места в новое
- Запускаем службу, относяющуюся к СУБД
/etc/init.d/postgresql start
Ссылка по теме:
- How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 16.04
Основы работы с MySQL из командной строки
Подключение к СУБД, создание базы, пользователя, назначение прав.
Как установить будильник на компьютере с Windows 10?
В операционной системе windows 10 есть встроенный будильник. Он так и назыается «Будильник и часы». Cочетает такие функции, как будильник, мировое время, таймер и секундомер.
Обновить bash на Windows 10
Если, запуская подсистему Linux мы получаем сообщение о необходимости обновить пакеты, то можно решить проблему удалив подсистему и поставив заново. Но тогда удалятся и данные, а можно данные сохранить, проведя процедуру upgrade подсистемы linux.
Что значат цветные значки ключей в HeidiSQL?
- Желтый ключ: Primary key
- Красный ключ: Unique key
- Зеленый ключ: Index
- Голубой ключ: Fulltext key
Обновление баз NOD32 на компьютере без интернета
Инструкция по offline обновление баз антивируса NOD32, если есть лицензия или готовый архив с базами
phpDocumentor на Ubuntu
Запись об установке и использовании phpDocumentor — системе документирования исходных текстов на PHP.
Всем привет! Сегодня мы рассмотрим процесс переноса базы данных PostgreSQL с одного сервера на другой, например, с компьютера разработчика на production-сервер, при этом мы будем использовать графический инструмент pgAdmin 4.
Заметка! Установка и настройка PostgreSQL на Windows 10.
Содержание
- Исходные данные. Задача
- Создание дампа базы данных PostgreSQL в pgAdmin 4
- Создание дампа базы данных в сжатом формате
- Создание дампа базы данных в простом формате SQL
- Импорт дампа базы данных PostgreSQL в pgAdmin 4
- Импорт сжатого дампа базы данных
- Импорт дампа базы данных в формате SQL
- Видео – Перенос базы данных PostgreSQL на другой сервер с помощью pgAdmin 4
Исходные данные. Задача
Допустим, мы разрабатываем базу данных в PostgreSQL, при этом мы используем обычный клиентский компьютер под управлением операционной системы Windows 10, где собственно локально и установлен PostgreSQL.
В качестве инструмента разработки мы используем стандартное графическое приложение pgAdmin 4.
pgAdmin 4 – это стандартный и бесплатный графический инструмент для разработки баз данных в PostgreSQL, который можно использовать для написания SQL запросов, разработки процедур, функций, а также для выполнения базовых задач администрирования баз данных.
В итоге базу данных мы разработали, протестировали ее, внесли в нее необходимые данные, заполнили справочники, в общем, база данных готова.
Теперь у нас возникла необходимость перенести эту базу данных на реальный сервер, который и будет выступать в качестве сервера баз данных. И так как мы используем PostgreSQL, в качестве такого сервера баз данных обычно выступает сервер под управлением операционной системы Linux.
Таким образом, нам необходимо перенести базу данных PostgreSQL, разработанную в Windows, в базу данных PostgreSQL на Linux. В моем случае в качестве операционной системы Linux будет выступать дистрибутив Debian.
Заметка! Как установить PostgreSQL на Linux Debian.
Весь процесс переноса базы данных PostgreSQL достаточно простой, суть в следующем.
Нам необходимо создать копию нашей базы данных (дамп), затем создать пустую базу на нужном нам сервере и восстановить все данные, используя созданный ранее дамп.
Все это можно сделать с нашего клиентского компьютера, используя pgAdmin 4, если, конечно же, целевой сервер нам доступен, если недоступен, то придётся каким-то другим образом переносить дамп базы данных на нужный сервер и, используя стандартные консольные утилиты, восстановить базу данных из дампа.
Кстати, стоит отметить, что pgAdmin 4 для экспорта/импорта баз данных использует как раз эти стандартные консольные утилиты, в частности pg_dump, pg_dumpall и pg_restore, которые по умолчанию входят в состав PostgreSQL.
pg_dump – утилита для экспорта баз данных PostgreSQL
pg_dumpall – утилита для экспорта кластера баз данных PostgreSQL (всех данных на сервере)
pg_restore – утилита восстановления баз данных PostgreSQL из файла архива
Таким образом, благодаря pgAdmin 4 нам не нужно писать и выполнять команды в командной строке, за нас все это делает pgAdmin 4, мы всего лишь будем пользоваться мышкой, настраивая все параметры в графическом интерфейсе.
Создать дамп базы данных PostgreSQL можно в нескольких форматах, в частности:
Специальный (Custom) – это пользовательский формат, который использует сжатие. Данный формат по умолчанию предлагается в pgAdmin 4 и рекомендован для средних и больших баз данных. Обычно архивные файлы в таком формате создают с расширением backup, однако можно использовать и другое расширение.
Tar (tar) – база данных выгружается в формат tar. Данный формат не поддерживает сжатие.
Простой (plain) – в данном случае база данных выгружается в обычный текстовый SQL-скрипт, в котором все объекты базы данных и непосредственно сами данные будут в виде соответствующих SQL инструкций. Данный скрипт можно легко отредактировать в любом текстовом редакторе и выполнить, используя Query Tool, как обычные SQL запросы. Данный формат рекомендован для небольших баз данных, а также для тех случаев, когда требуется внести изменения в дамп базы данных перед восстановлением.
Заметка! Что такое SQL. Назначение и основа.
Каталог (directory) – этот формат файла создает каталог, в котором для каждой таблицы и большого объекта будут созданы отдельные файлы, а также файл оглавления в машиночитаемом формате, понятном для утилиты pg_restore. Этот формат по умолчанию использует сжатие, а также поддерживает работу в несколько потоков.
В данном материале мы рассмотрим создание дампа в специальном формате, а также в формате обычного SQL скрипта, дело в том, что процесс восстановления базы данных из этих форматов в pgAdmin 4 немного отличается.
Создание дампа базы данных в сжатом формате
Чтобы создать дамп базы данных PostgreSQL в pgAdmin 4, необходимо в обозревателе выбрать нужную базу данных, я выбираю базу данных shop, далее необходимо вызвать контекстное меню правой кнопкой мыши и нажать на пункт «Резервная копия».
Затем всего лишь нужно указать имя архивного файла и путь к каталогу, где его сохранить, для этого можно использовать кнопку с тремя точками.
Формат «Специальный», как было отмечено ранее, предлагается по умолчанию, поэтому выбирать его не требуется.
Как я уже отмечал, обычно архив в таком формате создают с расширением backup, я так и поступаю, т.е. архив назову shop.backup и сохраню его в каталоге D:\PostgreSQL_Backup\.
В случае необходимости задать определенный уровень сжатия можно с помощью параметра «Коэффициент сжатия», поддерживаются значения от 0 до 9, где 0 – вообще не использовать сжатие, а 9 самый высокий уровень сжатия, по умолчанию используется умеренное сжатие.
В нашем случае база данных небольшая, поэтому мы можем оставить все по умолчанию.
Больше никаких настроек в нашем случае делать нет необходимости, и мы можем нажать на кнопку «Резервная копия», чтобы запустить процесс создания дампа базы данных.
Когда появится сообщение «Успешно завершено», значит, процесс создания дампа базы данных PostgreSQL завершен успешно, в противном случае Вы будете получать сообщения о неуспешном завершении.
Заметка! ТОП 5 популярных систем управления базами данных (СУБД).
Создание дампа базы данных в простом формате SQL
В данном случае нам необходимо сделать практически все то же самое, только нужно выбрать формат «Простой» и дополнительно включить пару параметров, чтобы добавление данных осуществлялось с помощью обычных инструкций INSERT, а не с помощью команды COPY, которая используется по умолчанию.
Для этого переходим на вкладку «Параметры выгрузки» и включаем два параметра «Использовать команды INSERT» и «INSERT с указанием столбцов», хотя данный параметр можно и не указывать.
Заметка! Начинающим программистам рекомендую почитать мою книгу «SQL код», которая поможет Вам изучить язык SQL как стандарт, в ней рассматриваются все базовые конструкции языка SQL, приводится много примеров и скриншотов.
Импорт дампа базы данных PostgreSQL в pgAdmin 4
Дамп готов, теперь можно переходить к восстановлению базы данных из этого дампа. Однако перед тем как приступать к импорту, необходимо создать пустую базу данных, в которую собственно и импортировать все данные, как это делается, я подробно рассказывал в отдельном материале.
Заметка! Как создать базу данных в PostgreSQL с помощью pgAdmin 4.
Все действия по созданию базы данных и восстановлению данных этой базы из архивной копии мы будем делать все на том же компьютере с помощью того же pgAdmin 4, только для этого необходимо подключиться к нужному нам серверу (пункт контекстного меню «Создать сервер» и ввести настройки для подключения, подробнее, как это делается, я рассказывал в той же статье, которая посвящена установке PostgreSQL на Debian).
Импорт сжатого дампа базы данных
Чтобы импортировать базу данных, дамп который был создан в «специальном» формате, необходимо на целевом сервере выбрать базу данных, которую требуется восстановить из дампа (мы ее предварительно создали), в контекстном меню выбрать пункт «Восстановить», затем в пункте «Имя файла», используя кнопку с тремя точками, указать файл дампа, который мы создали чуть ранее с расширением backup.
Больше никаких настроек вводить не требуется, нужный формат выбран по умолчанию, мы можем сразу нажимать кнопку «Восстановить».
Когда появится сообщение «Успешно завершено», процесс будет завершен.
В результате все данные будут восстановлены из дампа, и таким образом мы перенесли базу данных PostgreSQL на новый сервер.
Заметка! Как создать таблицу в PostgreSQL с помощью pgAdmin 4.
Импорт дампа базы данных в формате SQL
В случае с простым форматом, т.е. с обычными SQL инструкциями, использовать отдельный функционал для восстановления не получится, поэтому мы можем просто выполнить SQL скрипт, который содержится в этом файле.
Для этого открываем Query Tool (запросник) в контексте нужной нам базы данных, затем используя кнопку «Открыть файл» выбираем наш дамп в формате SQL и нажимаем кнопку «Выполнить».
Если инструкция выполнится без ошибок, значит, все хорошо.
Примечание! Если Вы уже восстановили базу данных предыдущим способом, то, чтобы использовать этот способ, необходимо пересоздать базу данных, иначе возникнет конфликт и, соответственно, ошибка, так как все объекты в базе уже будут существовать.
В итоге мы перенесли базу данных PostgreSQL с одного сервера, который управляется операционной системой Windows, на другой, который управляется Linux, хотя это, как Вы понимаете, в нашем случае было не так принципиально.
Стоит отметить, что если требуется перенести базу данных, размер которой достаточно большой, например, несколько десятков или сотен гигабайт, то лучше напрямую использовать консольные утилиты pg_dump или pg_dumpall, т.е. без графического интерфейса pgAdmin 4.
Опрос. Какой операционной системой Вы пользуетесь?
Видео – Перенос базы данных PostgreSQL на другой сервер с помощью pgAdmin 4
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Работая с СУБД PostgreSQL, рано или поздно вы можете столкнуться с потребностью в переносе базы данных с одного сервера на другой. Однако, несмотря на то, что данная задача может показаться сложной, ее можно реализовать внутренними средствами самой PostgreSQL.
В данной статье мы рассмотрим различные способы переноса базы данных в PostgreSQL с одного сервера на другой на операционной системе Ubuntu 22.04.
cloud
Предварительные требования
Для переноса базы данных нам потребуется:
-
Текущий сервер или виртуальная машина на операционной системе Ubuntu 22.04 с предустановленой СУБД PostgreSQL. База данных, которая будет перенесена, должна уже присутствовать в PostgreSQL.
-
Сервер или виртуальная машина с предустановленной ОС Ubuntu 22.04, например, запущенный в Timeweb Cloud. На сервере должна быть заранее установлена СУБД PostgreSQL. В данной статье будет использоваться 15 версия PostgreSQL.
-
Опционально: заранее установленная официальная клиентская программа с графическим интерфейсом для подключения и управления базами данных PostgreSQL — pgAdmin. Установить pgAdmin можно на любую ОС, включая Windows, Linux и macOS. Установить программу можно на ваш домашний или рабочий компьютер.
Регистрация в Timeweb Cloud
Чтобы арендовать облачный или выделенный сервер в Timeweb Cloud, необходимо пройти регистрацию.
Переходим по ссылке для регистрации нового пользователя. Мы выберем регистрацию на физическое лицо и заполним следующие данные:
-
ФИО,
-
адрес электронной почты.
Номер телефона можно указать по желанию. Также регистрацию можно пройти, воспользовавшись одним из сторонних сервисов: Google-аккаунт, ВКонтакте и GitHub.
После регистрации на указанный адрес почты придет сообщение с ссылкой для активации аккаунта и входа в панель — перейдите по ней.
Создание облачного сервера
После того, как учетная запись была создана и активирована, можно арендовать облачный сервер.
- Переходим на страницу авторизации и входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи ВКонтакте, GitHub, Google.
- После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
- Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходима Ubuntu версии 22.04.
- Выбираем регион, в котором будет находиться наш сервер. Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
- Далее выбираем необходимую конфигурацию для сервера. Так как в данной статье упор делается именно на перенос базы данных, то для конфигурации сервера выберем двухъядерный процессор и 40 ГБ жесткого диска. В реальности вам необходимо выбирать именно ту конфигурацию, которая будет удовлетворять вашим потребностям для базы данных. Выбираем соответствующий тариф:
- Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Для выхода сервера в Интернет, нужно заказать плавающий IP.
- По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна в Санкт-Петербурге и Москве).
- Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
- Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
- Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Подготовка перед переносом базы данных
Прежде чем приступать к переносу базы данных, убедитесь, что на обоих серверах:
-
Присутствует сетевое соединение между серверами. Для проверки сетевого соединения можно воспользоваться такими утилитами как
ping
иtelnet
(при использовании утилитыtelnet
проверить необходимо 22 и 5432 порты при условии, что они не были изменены); -
При использование firewall (например UFW, Iptables или другого ПО) убедитесь, что открыт порт 22 (для демона SSH) или другой порт, если порт по умолчанию для SSH был изменен. Также убедитесь, что открыт порт 5432 (стандартный порт, который слушает PostgreSQL) или другой порт, если порт для PostgreSQL по умолчанию был изменен;
-
На двух серверах достаточно свободного места на жестких дисках.
- На серверах, где установлена PostgreSQL, необходимо убедиться, что PostgreSQL может принимать удаленные соединения. Для этого:
1. Открываем на редактирование конфигурационный файл postgresql.conf
, который находится по пути /etc/postgresql/15/main/postgresql.conf
. Если у вас используется иная версия, замените 15 на свою версию:
nano /etc/postgresql/15/main/postgresql.conf
Находим параметр listen_addresses
. По умолчанию он закомментирован и принимает только локальные соединения, т.е. только с localhost. Указываем, с каких адресов разрешены удаленные подключения. Можно как указать конкретные адреса, с которых будет производиться подключение, так и разрешить доступ со всех адресов с помощью символа *
. В рамках данной инструкции и в тестовых целях можно разрешить доступ со всех адресов:
listen_addresses = '*'
При работе в production-окружениях необходимо указывать только конкретные адреса, с которых будет доступно подключение к PostgreSQL.
Сохраняем изменения и выходим из файла.
2. Далее открываем на редактирование файл pg_hba.conf
, который располагается по пути /etc/postgresql/15/main/pg_hba.conf
:
nano /etc/postgresql/15/main/pg_hba.conf
Если используемая версия PostgreSQL отличается от 15 версии, то вместо числа 15 в команде выше необходимо подставить используемую версию.
Находим строку, в которой содержатся настройки подключения для IPv4 (под комментарием # IPv4 local connections
) и приводим ее к следующему виду:
Вместо 0.0.0.0/0
(разрешен доступ со всех адресов) можно указать конкретные адреса. Однако в целях безопасности не разрешайте доступ со всех адресов, если перенос базы данных осуществляется между двумя серверами, которые доступны из внешней сети. Сохраняем изменения и выходим из файла.
3. Перезапускаем сервер PostgreSQL:
systemctl restart postgresql
- Заранее задайте пароль для пользователя БД на двух серверах сразу (в данном примере будет использоваться пользователь
postgres
, который присутствует по умолчанию; под этим пользователем будут выполняться все команды в psql). Используйте сложный пароль, который будет состоять минимум из 12 символов, а также содержать специальные знаки ($, %, & и т.д.). Для этого переключитесь на пользователя postgres в терминале при помощи команды:
sudo -i -u postgres psql
И в консоли psql
выполните запрос:
ALTER USER postgres WITH PASSWORD 'nsH7z*0kl>&7?7';
Где postgres
— это имя пользователя, а 'nsH7z*0kl>&7?7'
— пароль для учетной записи postgres
.
Перенос базы данных при помощи pg_dump и psql
Как правило, перенос базы данных осуществляется в три шага:
-
Снятие резервной копии базы данных.
-
Перенос созданной копии на нужный сервер (иногда данный этап соединяют с этапом восстановления из резервной копии).
-
Восстановление из резервной копии на новом сервере.
Все три шага можно выполнить стандартными инструментами PostgreSQL, которые поставляются в комплекте с СУБД: pg_dump
и psql
.
pg_dump
— утилита, предназначенная для создания резервных копий баз данных. Поддерживает множество различных параметров. Помимо выгрузки всей структуры БД, поддерживает выгрузку только определенных объектов базы данных (например, можно выгрузить только определенные таблицы или столбцы). Базу данных можно выгрузить как одним файлом, так и в виде архива одного из поддерживаемых форматов.
psql
— консольная утилита, предназначенная как для подключения к базе данных, так и для выполнения запросов. При помощи psql
можно удаленно подключаться к другим серверам PostgreSQL.
В качестве примера будет использоваться база данных с именем e-commerce
, в которой хранится информация о покупках в интернет магазине. Размер тестовой базы данных составляет около 7,7 МБ. Создадим структуру базы данных. Все SQL запросы перечисленные ниже необходимо выполнять строго последовательно.
CREATE DATABASE e_commerce;
\c e_commerce
CREATE TABLE categories (
category_id SERIAL NOT NULL PRIMARY KEY,
category_name VARCHAR(255),
description VARCHAR(255)
);
INSERT INTO categories (category_name, description)
VALUES
('Confections', 'Desserts, candies, and sweet breads'),
('Dairy Products', 'Cheeses'),
('Grains/Cereals', 'Breads, crackers, pasta, and cereal'),
('Meat/Poultry', 'Prepared meats'),
('Seafood', 'Seaweed and fish');
CREATE TABLE customers (
customer_id SERIAL NOT NULL PRIMARY KEY,
customer_name VARCHAR(255),
contact_name VARCHAR(255),
address VARCHAR(255),
city VARCHAR(255),
postal_code VARCHAR(255),
country VARCHAR(255)
);
INSERT INTO customers (customer_name, contact_name, address, city, postal_code, country)
VALUES
('Alfreds Futterkiste', 'Maria Anders', 'Obere Str. 57', 'Berlin', '12209', 'Germany'),
('Ana Trujillo Emparedados y helados', 'Ana Trujillo', 'Avda. de la Constitucion 2222', 'Mexico D.F.', '05021', 'Mexico'),
('Antonio Moreno Taquera', 'Antonio Moreno', 'Mataderos 2312', 'Mexico D.F.', '05023', 'Mexico'),
('Around the Horn', 'Thomas Hardy', '120 Hanover Sq.', 'London', 'WA1 1DP', 'UK'),
('Berglunds snabbkoep', 'Christina Berglund', 'Berguvsvegen 8', 'Lulea', 'S-958 22', 'Sweden');
CREATE TABLE products (
product_id SERIAL NOT NULL PRIMARY KEY,
product_name VARCHAR(255),
category_id INT,
unit VARCHAR(255),
price DECIMAL(10, 2)
);
INSERT INTO products (product_id, product_name, category_id, unit, price)
VALUES
(1, 'Chais', 1, '10 boxes x 20 bags', 18),
(2, 'Chang', 1, '24 - 12 oz bottles', 19),
(3, 'Aniseed Syrup', 2, '12 - 550 ml bottles', 10),
(4, 'Chef Antons Cajun Seasoning', 2, '48 - 6 oz jars', 22),
(5, 'Chef Antons Gumbo Mix', 2, '36 boxes', 21.35);
CREATE TABLE orders (
order_id SERIAL NOT NULL PRIMARY KEY,
customer_id INT,
order_date DATE
);
INSERT INTO orders (order_id, customer_id, order_date)
VALUES
(10248, 90, '2021-07-04'),
(10249, 81, '2021-07-05'),
(10250, 34, '2021-07-08'),
(10251, 84, '2021-07-08'),
(10252, 76, '2021-07-09');
В качестве первого варианта, рассмотрим перенос базы данных с сервера с IP-адресом 80.90.188.61 на сервер с IP-адресом 81.200.149.98. Для это воспользуемся следующей командой:
pg_dump -h localhost -U postgres e_commerce | psql -h 81.200.149.98 -U postgres e_commerce
Где:
pg_dump
— вызов утилитыpg_dump
для создания резервной копии базы данных;-h localhost
— адрес сервера (IP-адрес или доменное имя), на котором находится база данных. В данном примере адрес сервера БД совпадает с адресом самого сервера. Если база данных находится на другом сервере, то при наличии сетевого доступа можно указать адрес удаленной БД;-U postgres
— имя пользователя, из-под которого производится подключение к БД;e_commerce
— имя базы данных, которая будет перенесена;psql
— вызов утилитыpsql
. В данном случае утилитаpsql
выполняет сразу 2 действия: подключается к удаленному серверу PostgreSQL и загружает ранее указанную базу данных;-h 81.200.149.98
— адрес сервера (IP-адрес или доменное имя), на который будет произведен перенос базы данных;-U postgres
— имя пользователя, из-под которого производится подключение к БД;e_commerce
— имя базы данных, в которую будет скопирована вся структура переносимой базы данных. Данная БД должна быть создана заранее. Для этого на сервер, на который будет перенесена база данных, необходимо войти под необходимым пользователем, напримерpostgres
, запустить утилитуpsql
и ввести запрос:
CREATE DATABASE e_commerce;
После ввода команды pg_dump
запросит пароль пользователя, от имени которого происходит подключение к базе данных, и начнется процесс копирования базы данных на удаленный хост.
Если у вас отсутствует удаленный доступ к серверу PostgreSQL, то можно сначала сохранить базу данных в файл или архив, далее скопировать файл с резервной копией базы данных при помощи утилиты scp
и загрузить её на хост с сервером PostgreSQL. Для этого воспользуемся командой:
pg_dump -h localhost -U postgres e_commerce > e_commerce.sql && scp e_commerce.sql db-admin@81.200.149.98:/var/lib/postgresql
При выполнении команды во время копирования файлов с помощью утилиты
scp
будет запрошен пароль пользователяpostgres
в системе, а не пароль пользователяpostgres
, заданный внутри СУБД.
Где:
pg_dump
— вызов утилитыpg_dump
для создания резервной копии базы данных;-h localhost
— адрес сервера (IP-адрес или доменное имя), на котором находится база данных. В данном примере адрес сервера БД совпадает с адресом самого сервера. Если база данных находится на другом сервере, то при наличии сетевого доступа можно указать адрес удаленной БД;-U postgres
— имя пользователя, из-под которого производится подключение к БД;e_commerce
— имя базы данных, которая будет перенесена;e_commerce.sql
— имя файла в формате.sql
, в который будет сохранена структура базы данных и все ее данные;scp
— утилита для защищенного копирования файлов между хостами. Для передачи данных и обеспечения защиты использует протокол SSH;db-admin@81.200.149.98:/var/lib/postgresql
— указывает имя пользователя на удаленном сервере, далее через@
адрес удаленного сервера, а через двоеточие — полный путь, куда будет сохранен файл с резервной копией.
После ввода команды необходимо сперва ввести пароль от учетной записи пользователя БД (в данном примере это пользователь postgres
) далее ввести пароль пользователя удаленного сервера (в данном примере это пользователь db-admin
).
После того как файл был скопирован на удаленный хост, необходимо загрузить его в базу данных. Команды, предоставленные ниже необходимо выполнять на втором сервере. Для этого сначала создаем базу данных в консоли psql
:
CREATE DATABASE e_commerce;
Далее выходим из оболочки psql
и в терминале выполняем команду:
psql e_commerce < e_commerce.sql
Начнется процесс импорта данных в созданную базу данных.
Создание сжатого архива резервной копии базы данных
Если копируемая база данных имеет большой размер, то предварительно её можно сохранить в сжатый .tar-архив:
pg_dump -h localhost -U postgres e_commerce > e_commerce.tar.gzip && scp e_commerce.tar.gzip db-admin@81.200.149.98:/var/lib/postgresql
При выполнении команды во время копирования файлов с помощью утилиты
scp
будет запрошен пароль пользователяpostgres
в системе, а не пароль пользователяpostgres
, заданный внутри СУБД.
Импорт архива происходит точно так же, как и с файлом с расширением .sql
(дополнительно разархивировать архив не надо):
psql e_commerce < e_commerce.tar.gzip
Создание временной метки (Timestamp) в имени архива
Если вам необходимо знать точную дату и время, когда была создана резервная копия базы данных, вы можете включить её в имя создаваемого файла. Для этого используется команда date
и формат даты. В примере ниже будет использован формат даты «день-месяц-год»:
pg_dump -h localhost -U postgres e_commerce > e_commerce_$(date +%d-%m-%y).sql
Перенос базы данных при помощи программы pgAdmin
Помимо использования консольных утилит pg_dump
и psql
, перенести базу данных можно при помощи графического интерфейса, а именно используя программу pgAdmin
. Единственное ограничение, существующее в pgAdmin
, заключается в том, что при попытке восстановления файла резервной копии базы данных программа не поддерживает формат обычного текстового формата (plain text). В этом случае при сохранении файла резервной копии необходимо сохранять её в виде tar-архива или директории (будет показано далее).
- Запускаем
pgAdmin
и подключаемся к серверу PostgreSQL, на котором располагается необходимая база данных. Для этого нажимаем правой кнопкой по меню Object Explorer, которое находится слева. Далее в контекстном меню выбираем Register, потом Server:
- В появившемся окне задаем любое удобное имя для нового соединения в поле Name, например,
my_db
:
- Переходим в раздел Connections и заполняем следующие поля:
-
- Host name/address — IP-адрес или доменное имя хоста, на котором находится сервер PostgreSQL. Если
pgAdmin
установлен на одном хосте с PostgreSQL, то в качестве адреса можно указать localhost или 127.0.0.1. Если же СУБД установлена на удаленном хосте, то прописываем адрес нужного хоста. Также необходимо убедиться, что до удаленного сервера с PostgreSQL проходит сетевое соединение и разрешен удаленный доступ; - Port — порт, который слушает PostgreSQL. Порт по умолчанию — 5432. Если же стандартный порт был изменен, то указываем необходимый;
- Maintenance database — имя базы данных, к которой будет произведено подключение и для которой будет создаваться резервная копия;
- Username — имя пользователя, из-под которого будет произведено подключение к базе данных;
- Password — пароль от учетной записи пользователя.
- Host name/address — IP-адрес или доменное имя хоста, на котором находится сервер PostgreSQL. Если
После того как необходимые поля заполнены, подключаемся к базе данных, нажав на кнопку Save справа снизу.
Если все данные для подключения введены правильно, то слева отобразится подключенная база данных.
- Для того чтобы сделать резервную копию, щелкаем правой кнопкой мыши по имени базы данных и выбираем пункт Backup:
- В появившемся окне заполняем следующие поля:
-
- Filename — имя для файла резервной копии БД. При нажатии на значок папки справа можно выбрать путь, куда будет сохранен файл резервной копии;
- Format — формат файла, в котором будет сохранена резервная копия. Необходимо выбрать одно значение из выпадающего списка;
- Encoding — кодировка для хранения текста базы данных. Рекомендуется выбрать универсальный вариант кодировки — UTF8.
В разделе Objects можно выбрать, какие объекты базы данной будут сохранены в файле резервной копии:
После того как необходимые данные выбраны, нажимаем на кнопку Backup.
Начнется процесс резервного копирования базы данных. При нажатии на кнопку View Processes:
Можно наблюдать за процессом резервного копирования:
- Для того чтобы восстановить базу данных из резервной копии, заранее создаем пустую базу данных в оболочке
psql
:
CREATE DATABASE e_commerce;
Далее в pgAdmin
подключаемся к другому серверу PostgreSQL, указав в качестве подключаемой БД e_commerce
.
После подключения щелкаем правой кнопкой мыши по названию базы данных и выбираем пункт Restore:
- В открывшемся меню заполняем следующие поля:
-
- Format — из выпадающего списка выбираем формат файла, в котором сохранена резервная копия. Как уже было упомянуто ранее,
pgAdmin
не поддерживает восстановление из форматаplain text
(сюда относятся любые файлы, расширение которых не.tar
и которые сохранены не в виде директорий). Если попытаться загрузить файл обычного формата (например, с расширением.sql
), то возникнет ошибка:pg_restore: error: input file appears to be a text format dump. Please use psql
. - Filename — указываем полный путь до файла с резервной копией. Путь можно указать как вручную, так и воспользовавшись проводником (иконка директории, располагающаяся справа).
- Format — из выпадающего списка выбираем формат файла, в котором сохранена резервная копия. Как уже было упомянуто ранее,
После этого нажимаем на кнопку Restore.
Начнется процесс восстановления из резервной копии. После того как процесс будет полностью завершен, появится всплывающее окно с надписью Process completed:
Заключение
СУБД PostgreSQL предоставляет несколько способов организации переноса базы данных с одного хоста на другой. Также благодаря обширному функционалу встроенных инструментов открываются расширенные возможности гибкого резервного копирования ваших баз данных.
Migrating the data cluster from C:\ to E:\
I’m new to working with large data in Windows, and ran into some unexpected difficulty when the PostgreSQL database ran out of space on my server’s C drive. It might also be a good idea to isolate your postgres database from a location other than the C:\Program Files\
folder for permissions/security/data integrity reasons (I had a reference for this but I lost it). Here’s how to move your PostgreSQL data directory
Basing myself on this dba.stackex answer and this wiki post
1. Stop the PostgreSQL service
Go to Start > Services
. Scroll down to postgresql-x64-9.5
and right-click Stop
2. Copy data
I copied the data with File Explorer from C:\Program Files\PostgreSQL\9.5\data\
to E:\pg_db\data
3. Modify postgresql.conf (probably not necessary if you move everything to the new location)
I edited the following lines
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
# The default values of these variables are driven from the -D command-line
# option or PGDATA environment variable, represented here as ConfigDir.
data_directory = 'E:\pg_db\data' # use data in another directory
# (change requires restart)
hba_file = 'C:\Program Files\PostgreSQL\9.5\data\pg_hba.conf' # host-based authentication file
# (change requires restart)
ident_file = 'C:\Program Files\PostgreSQL\9.5\data\pg_ident.conf' # ident configuration file
# (change requires restart)
4. Modify the command that starts PostgreSQL
If you Right Click to Properties
on the PostgreSQL services in Services
, you’ll notice that the startup command is
"C:\Program Files\PostgreSQL\9.5\bin\pg_ctl.exe" runservice -N "postgresql-x64-9.5" -D "C:\Program Files\PostgreSQL\9.5\data" -w
The -D "C:\Program Files\PostgreSQL\9.5\data"
flag is indicating that the data directory is C:\Program Files\PostgreSQL\9.5\data
DO NOT EDIT THE REGISTRY
In any case, I didn’t have permission on the server I was using and it seems to be a Bad Idea(tm) see here
Direct registry modification should be avoided (because you can’t be sure what else Windows is changing when it modifies the path to exe, f.e.) unless you are absolutely sure what you do
Start the cmd
prompt as an administrator by hitting the Windows button and typing cmd
then right-clicking “Run as Administrator”
You can see the current configuration for PostgreSQL by typing sc qc postgresql-x64-9.5 1000
and hitting Enter.
Modify the configuration to the following with the sc
command
sc config postgresql-x64-9.5 binPath= "\"C:\Program Files\PostgreSQL\9.5\bin\pg_ctl.exe\" runservice -N \"postgresql-x64-9.5\" -D \"E:\pg_db\data\" -w"
5. Change permissions for the new data directory
For the new data-dictionary folder: Right-click on it and click Properties
. Under the Security
Tab click “Edit...
” and then “Add...
”. Type “Network Service
” and then click “Check Names
”, make sure it has Modify
and Full Control
permissions and then click OK
.
Equally important PostgreSQL needs to be able to “see” the data-directory (see my ServerFault.StackEx question), i.e. it needs to have read access to the parent directories above it. So Right-click on the pg_db
folder and under the Security
Permissions add Network Services
again, but this time it only needs Read & Execute
as well as List folder contents
permissions.
6. Restart the Service
Go back to the Services
window (if it was still open, refresh it) and Start
the PostgreSQL service. You should be able to connect to it again in PGAdmin
postgresql
В этой статье расскажем, как правильно осуществить перенос базы данных PostgreSQL с одного сервера на другой. Рассмотрим несколько вариантов создания дампа и его дальнейшего импорта на новый VPS/VDS.
Необходимость такого переноса может возникнуть после того, как IT-специалист завершает разработку базы данных PostgreSQL через бесплатную программу pgAdmin 4. Этот инструмент предпочитают многие разработчики, так как он идеально подходит для решения самых разных задач:
- написание SQL-запросов;
- разработка процедур;
- администрирование БД PostgreSQL.
Прелесть pgAdmin 4 редакции в том, что она работает в режиме веб-приложения, так что с программой можно работать удаленно буквально из любой точки мира. Это программное обеспечение совместимо со всеми актуальными версиями операционных систем Linux, Windows и macOS, что лишь подчеркивает его универсальность. Но не будем сильно отклоняться от темы и перейдем к рассмотрению процесса переноса базы данных PostgreSQL на другой сервер.
Создание резервной копии БД PostgreSQL в pgAdmin 4
Наша задача – создать копию существующей БД, а затем перенести её на новый VPS-сервер и там восстановить данные. Всё это легко делается через клиентский компьютер в веб-приложении pgAdmin 4:
- В обозревателе выберите целевую базу данных.
- Кликните на неё ПКМ и выберите пункт «Резервная копия».
Программа предложит вам указать имя для дампа и путь, по которому сохранится бэкап-файл. В поле «Формат» оставляем «Специальный», или «Custom», если интерфейс приложения у вас на английском. Рассматриваемый формат предполагает сжатие, и он рекомендуется для резервирования больших и средних баз данных, так будет проще осуществить перенос. Помимо него, существуют еще три формата:
- Tar (tar) – в этом случае база данных не сжимается.
- Простой (plain). На выходе получаем текстовый SQL-скрипт, содержащий инструкции. Этот формат хорош тем, что позволяет на ходу редактировать дамп базы данных через любой удобный текстовый редактор. Если после создания дампа планируете что-то изменять в нем до импорта на новый сервер, то этот вариант оптимален.
- Каталог (directory). Создается каталог, где все таблицы и объемные объекты резервируются в виде отдельных файлов. Directory-формат применяет алгоритмы сжатия и позволяет выгружать данные в несколько потоков параллельно – удобно для больших БД.
Как мы уже отметили выше, в большинстве случаев следует оставлять формат, установленный по умолчанию – это custom. В результате сжатия вы получите файл в расширении .backup, и система выдаст сообщение об успешном завершении.
Импорт дампа БД PostgreSQL в pgAdmin 4
Полученный файл необходимо перенести на другой VPS или VDS. Здесь всё просто:
- На новом сервере заходим в pgAdmin и создаем пустую базу данных. Для этого кликните правой кнопкой по вкладке «Базы данных» и выберите пункт «Создать».
- Теперь по созданной базе данных во всё той же вкладке «Базы данных» кликните правой кнопкой и выберите пункт «Восстановить», или «Restore».
- Далее укажите формат дампа базы данных и путь к файлу с расширением .backup, который мы создали несколькими минутами ранее.
После подтверждения начнется процесс импорта дампа БД PostgreSQL в pgAdmin 4, он может длиться от доли секунды до нескольких минут, всё зависит от производительности серверного железа и размера файла.
Экспортирование и импортирование базы данных в простом формате SQL
Графическая оболочка pgAdmin 4 позволяет также осуществить экспорт базы данных в виде системных SQL инструкций. Делать нужно практически всё то же самое, только при выборе формата указываем «Простой», и дополнительно активируем пару опций во вкладке «Параметры выгрузки»:
- Использовать команды INSERT.
- INSERT с указанием столбцов.
Затем аналогичным образом переносим резервную копию на новый сервер и импортируем её. Стандартные функции для восстановления здесь не подойдут, вместо этого от нас потребуется выполнить SQL-скрипт, содержащийся в файле дампа. Для этого делаем следующее:
- Через контекстное меню целевой БД заходим в запросник Query Tool.
- Нажимаем на пункт «Открыть файл», и в появившемся окошке выбираем дамп базы данных в простом формате SQL, созданный ранее.
- Жмем «Выполнить».
Если всё сделали правильно, процесс восстановления займет пару мгновений, и вы сможете приступить к дальнейшей работе. Импорт дампа БД в формате SQL подойдет в тех ситуациях, когда нужно перенести базу данных с одной ОС на другую – например, с Windows на Linux, с macOS на Debian и т.д.
Напоследок добавим, что при необходимости переноса объемной базы данных, размер которой исчисляется несколькими десятками или даже сотнями гигабайт, разумнее прибегнуть к использованию консольных утилит pg_dump или pg_dumpall, в обход графического интерфейса pgAdmin 4. На этом мы заканчиваем наш материал, спасибо за внимание!