Всем привет! Сегодня мы рассмотрим процесс переноса базы данных 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
На сегодня это все, надеюсь, материал был Вам полезен, пока!
I have Postgres DB on machine with Windows OS, also I have virtual machine with Linux (Ubuntu). I need to move data from Windows to Linux.
Thanks in advance!
asked Oct 11, 2017 at 14:36
2
you can use below query to restore a database from one server to another
pg_dump -C -h SourceServer -U SourceUser SourceDB | psql -h TargetHost -U TargetUser TargetDB
Password can be used from pgpass.conf
answered Oct 11, 2017 at 19:03
YogeshRYogeshR
1,4262 gold badges20 silver badges38 bronze badges
I had to transfer a DB from my local machine ( Windows 11) to an Linux (Ubuntu Bionic) server, so I did the following:
- Dumped my DB into a backup file with extension .sql by using the following command
-
Open the terminal
-
Go to the folder where postgresql is installed in my case it was
C:Program FilesPostgreSQL14bin
-
In the terminal write
cd C:Program FilesPostgreSQL14bin
-
Type the following command, change the <db_name> and <folder_name> as required and press enter.
pg_dump.exe -U postgres -d <db_name> -f D:<folder_name><db_name>.sql
-
Enter your password and it will create the backup in the mentioned folder.
-
Connect to the Linux Server and copy the <db_name>.sql file
scp D:<folder_name><db_name>.sql username@ip_address:/<destination_folder>
-
Install postgresql on the server
sudo apt-get install postgresql postgresql-contrib
-
Check the status
service postgresql status
-
Create DB
sudo su postgres psql -U postgres -c “create database <db_name>”
-
Import the data from the dump file to this new DB.
psql db_name < /path/db_name.sql
answered Dec 28, 2021 at 7:03
coderinacoderina
1,44511 silver badges19 bronze badges
Just for the record, you should ask in PostgreSQL mailing list.
My personal idea is the binary format is fixed, so no problem.
Anyway, just to try, I:
a) copy the pgdata directory, from PG9.5 from Windows Server 2012 to Linux;
b) compile 9.5 on Linux;
c) change the specific Windows options in postgresql.conf;
d) run it…
And it starts, but it complains about locale (I have to investigate further to figure out):
LOG: database system was interrupted; last known up at 2020-02-27
03:57:27 CETLOG: database system was not properly shut down; automatic recovery
in progressLOG: redo starts at 34/DFD49EF8
LOG: invalid record length at 34/DFE33560
LOG: redo done at 34/DFE33538
LOG: last completed transaction was at log time 2020-02-27
04:00:52.844739+01LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «postgres»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «postgres»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «template1»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «template0»FATAL: role «gelma» does not exist
FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE
«Italian_Italy.1252», which is not recognized by setlocale().HINT: Recreate the database with another locale or install the
missing locale.FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE
«Italian_Italy.1252», which is not recognized by setlocale().
Anyway the server is up and running.
Also using pg_dump I don’t think the locale is automagically converted.
So, finding the original super user and how to change collate/locale should be the only things left.
Just for the record, you should ask in PostgreSQL mailing list.
My personal idea is the binary format is fixed, so no problem.
Anyway, just to try, I:
a) copy the pgdata directory, from PG9.5 from Windows Server 2012 to Linux;
b) compile 9.5 on Linux;
c) change the specific Windows options in postgresql.conf;
d) run it…
And it starts, but it complains about locale (I have to investigate further to figure out):
LOG: database system was interrupted; last known up at 2020-02-27
03:57:27 CETLOG: database system was not properly shut down; automatic recovery
in progressLOG: redo starts at 34/DFD49EF8
LOG: invalid record length at 34/DFE33560
LOG: redo done at 34/DFE33538
LOG: last completed transaction was at log time 2020-02-27
04:00:52.844739+01LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «postgres»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «postgres»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «template1»FATAL: no pg_hba.conf entry for host «[local]», user «gelma»,
database «template0»FATAL: role «gelma» does not exist
FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE
«Italian_Italy.1252», which is not recognized by setlocale().HINT: Recreate the database with another locale or install the
missing locale.FATAL: database locale is incompatible with operating system
DETAIL: The database was initialized with LC_COLLATE
«Italian_Italy.1252», which is not recognized by setlocale().
Anyway the server is up and running.
Also using pg_dump I don’t think the locale is automagically converted.
So, finding the original super user and how to change collate/locale should be the only things left.
В этой статье расскажем, как правильно осуществить перенос базы данных PostgreSQL с одного сервера на другой. Рассмотрим несколько вариантов создания дампа и его дальнейшего импорта на новый VPS/VDS.
- Создание резервной копии БД PostgreSQL в pgAdmin 4
- Импорт дампа БД PostgreSQL в pgAdmin 4
- Экспортирование и импортирование базы данных в простом формате SQL
Необходимость такого переноса может возникнуть после того, как IT-специалист завершает разработку базы данных PostgreSQL через бесплатную программу pgAdmin 4. Этот инструмент предпочитают многие разработчики, так как он идеально подходит для решения самых разных задач:
- написание SQL-запросов;
- разработка процедур;
- администрирование БД PostgreSQL.
Прелесть pgAdmin 4 редакции в том, что она работает в режиме веб-приложения, так что с программой можно работать удаленно буквально из любой точки мира. Это программное обеспечение совместимо со всеми актуальными версиями операционных систем Linux, Windows и macOS, что лишь подчеркивает его универсальность. Но не будем сильно отклоняться от темы и перейдем к рассмотрению процесса переноса базы данных PostgreSQL на другой сервер.
Наша задача – создать копию существующей БД, а затем перенести её на новый 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. На этом мы заканчиваем наш материал, спасибо за внимание!
Не простая операция, если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп загрузить в нужном месте :).
Фокусы, которые тут не работают
Базы mySQL я иногда экспортирую не с помощью скрипта, а копирую файлы данных. В каталоге, где они хранятся, название подкаталогов — это имена баз, а каждая таблица состоит из 2-3 файлов, с именем как у самой таблицы. Копирование сработает, если основные версии серверов совпадает.
В случае postgresql подобный фокус не работает. Вы можете подсмотреть папку с базами данных в конфигурации (вам поможет вот такая команда)
ps auxw | grep postgres | grep — —D |
postgres 23395 0.0 0.7 247736 16164 ? S 17:33 0:00 /usr/lib/postgresql/9.3/bin/postgres —D /var/lib/postgresql/9.3/main —c config_file=/etc/postgresql/9.3/main/postgresql.conf |
В примере папка с базами: -D /var/lib/postgresql/9.3/main
Названия таблиц и баз вы здесь не увидите в явном виде. Копирование файлов будет бесполезно.
Самый главный админ
Первое, что надо усвоить — операции с postgresql удобно выполнять с правами postgresql же суперадмина. На юзера root PSQL чихал и не признает его авторитета. По умолчанию, супер-юзер имеет имя postgres.
Переходим под эту учетку.
Посмотреть список баз данных
Чтобы узнать какие базы у вас есть в наличии можно использовать команду:
В консоль будет выведен список баз данных, информация о владельце каждой базы, привилегиях.
Если вы и так знаете название базы данных, и вас есть реквизиты доступа к ней (взятые, к примеру, в настройках подключения вашего сайта или программы), то знакомство со списком баз можно пропустить.
Получение дампа базы postgresql
Для создания дампа базы служит команда pg_dump. Мы направим её вывод в файл через gzip.
pg_dump —h localhost —O —F t —c —U postgres myDBname | gzip —c > myDB—filedump.gz |
Здесь:
myDBname — это название базы данных, а myDB-filedump.gz — название файла, куда будет сохранен дамп.
Расшифровка ключей:
-h [host] : явное указание хоста, значение по умолчанию localhost или значение из переменной окружения PGHOST.
-О : пропускает команды для установки владельца таблиц, видов и т.д.
-F {c|t|p} — формат вывода данных custom, tar, plane text.
-U [username] — пользователь, чьими правами доступа нужно воспользоваться при запросе данных. По умолчанию берется текущий пользователь. При необходимости программа запросит пароль.
-C, —create — добавляет команду для создания БД, я покажу как создать её вручную.
-c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
Есть и более мощная команда, которая выгружает сразу все базы:
pg_dumpall | gzip —c > allDB—filedump.gz |
Справку по ключам можно посмотреть так:
pg_dump —help pg_dumpall —help |
Создание новой базы из консоли PostpreSQL
Получив дамп базы, развернем его на новом месте. Если вы не «зашили» в дамп создание базы, то вам нужно будет предварительно её создать (если она не была создана ранее).
Переходим в консоль postgresql:
В консоли введите SQL команду на создание базы данных. Как видите, я авторизован как супер-юзер PSQL. Для выхода из консоли можно нажать CTRL+D.
Не забывайте про «точку с запятой» в конце команды — без неё команда не будет выполнена. В случае успеха, вы увидите в консоли отклик сервера — «CREATE DATABASE».
Заливка дампа базы postgresql
Для начала распакуем файл из обертки gz:
Теперь все готово для импорта данных.
psql —d myNewBase —f myDB—filedump |
Так база данных myNewBase будет заполнена из файла myDB-filedump.
Данная запись опубликована в 24.01.2017 03:43 и размещена в Программирование.
Вы можете перейти в конец страницы и оставить ваш комментарий.
В процессе обучения аналитике данных у человека неизбежно возникает вопрос о миграции данных из одной среды в другую. Поскольку одним из необходимых навыков для аналитика данных является знание SQL, а одной из наиболее популярных СУБД является PostgreSQL, предлагаю рассмотреть импорт и экспорт данных на примере этой СУБД.
В своё время, столкнувшись с импортом и экспортом данных, обнаружилось, что какой-то более-менее структурированной инфы мало: этот момент обходят на всяких там курсах по аналитике, подразумевая, что это очень простые моменты, которым не следует уделять внимание.
В данной статье приведены примеры импорта в PostgreSQL непосредственно самой базы данных в формате sql, а также импорта и экспорта данных в наиболее простом и распространенном формате .csv, в котором в настоящее время хранятся множество существующих датасетов. Формат .json хоть и является также очень распространенным, рассмотрен не будет, поскольку, по моему скромному мнению, с ним все-таки лучше работать на Python, чем в SQL.
1. Импорт базы данных в формате в PostgreSQL
Скачиваем (получаем из внутреннего корпоративного источника) файл с базой данных в выбранную папку. В данном случае путь:
C:UsersUser-NDesktopБД
Имя файла: demo-big-20170815
Далее понадобиться командная строка windows или SQL shell (psql). Для примера воспользуемся cmd. Переходим в каталог, где находится скачанная БД, командой cd C:UsersUser-NDesktopБД :
Далее выполняем команду для загрузки БД из sql-файла:
"C:Program FilesPostgreSQL10binpsql" -U postgres -f demo-big-20170815.sql
Где сначала указывается путь, по которому установлен PostgreSQL на компьютере, -U
– имя пользователя, -f
— название файла БД.
Отметим, что в зависимости от размера базы данных загрузка может занимать до нескольких десятков минут. Конец загрузки будет отмечен следующим видом:
Заходим в pgAdmin и наблюдаем там импортированную БД:
С таблицами:
2. Импорт данных из csv-файла
Предполагается, что у вас уже есть необходимый .csv-файл, и первое, что нужно сделать, это перейти pgAdmin и создать там новую базу данных. Ну или воспользоваться уже существующей, в зависимости от текущих нужд. В данном случае была создана БД airtickets.
В выбранной БД создается таблица с полями, типы которых должны соответствовать «колонкам» в выбранном .csv-файле.
Далее воспользуемся SQL shell (psql) для подключения к нужной БД и для подачи команд на импорт данных. При открытии SQL shell (psql) она стандартно спросит про имя сервера, имя подключаемой БД, порт и пользователя. Ввести нужно только имя БД и пароль пользователя, всё остальное проходим нажатием ентра. Создается подключение к нужной БД – airtickets.
Ну и вводим команды на импорт данных из файла:
COPY tickets FROM ‘C:UsersUser-NDesktopCSVticket_dataset_MOW.csv’ DELIMITER ‘,’ CSV HEADER;
Где tickets
– название созданной в БД таблицы, из – путь, где хранится .csv-файл, DELIMITER ‘,’
– разделитель, используемый в импортируемом .csv-файле, сам формат файла и HEADER
, указывающий на заголовки «колонок».
Один интересный момент. Написание команды COPY
строчными (маленькими) буквами привело к тому, что psql ругнулся, выдал ошибку и предложил написать команду прописными буквами.
Заходим в pgAdmin и удостоверяемся, что данные были загружены.
3. Экспорт данных в .csv-файл
Предположим, нам надо сохранить таблицу airports_data из уже упоминаемой выше БД demo.
Для этого подключимся к БД demo через SQL shell (psql) и наберем команду, указав уже знакомые параметры разделителя, типа файла и заголовка:
COPY airports_data TO ‘C:UsersUser-NDesktopCSVairports.csv’ DELIMITER ‘,’ CSV HEADER;
Существует и другой способ экспорта через pgAdmin: правой кнопкой мыши по нужной таблице – экспорт – указание параметров экспорта в открывшемся окне.
4. Экспорт данных выборки в .csv-файл
Иногда возникает необходимость сохранить в .csv-файл не полностью всю таблицу, а лишь некоторые данные, соответствующие некоторому условию. Например, нам нужно из БД demo таблицы flights выбрать поля flight_id, flight_no, departure_airport, arrival_airport, где departure_airport = ‘SVO’. Данный запрос можно вставить сразу в команду psql:
COPY (SELECT flight_id, flight_no, departure_airport, arrival_airport FROM flights WHERE departure_airport = 'SVO') TO ‘C:UsersUser-NDesktopCSVflights_SVO.csv' CSV HEADER DELIMITER ',';
Вот такой небольшой гайд получился.