Импортировать дамп SQL в базу данных PostgreSQL


453

Мы переключаем хосты, а старый предоставил дамп SQL базы данных PostgreSQL нашего сайта.

Теперь я пытаюсь настроить это на локальном сервере WAMP, чтобы проверить это.

Единственная проблема заключается в том, что я не представляю, как импортировать эту базу данных в PostgreSQL 9, который я настроил.

Я попытался pgAdmin III, но я не могу найти функцию импорта. Поэтому я просто открыл редактор SQL, вставил туда содержимое дампа и выполнил его, он создает таблицы, но продолжает выдавать ошибки, когда пытается вставить данные в него.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Я также пытался сделать это с помощью командной строки, но не могу найти нужную мне команду.

Если я сделаю

psql mydatabase < C:/database/db-backup.sql;

Я получаю ошибку

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Какой лучший способ импортировать базу данных?


У меня была подобная ошибка в вашей первой: ERROR: syntax error at or near "t". Оказалось, что я импортировал только частичную схему, и, таким образом, CREATE TABLEоператор в сценарии ранее потерпел неудачу. Просмотрите весь вывод импорта, чтобы найти его.
owensmartin

Ответы:


732
psql databasename < data_base_dump

Это команда, которую вы ищете.

Осторожно: databasenameнеобходимо создать перед импортом. Взгляните на Документы PostgreSQL Глава 23. Резервное копирование и восстановление .


1
Я пробовал эту psql mydatabase <C: \ database \ db-backup.sql, но я получаю сообщение об ошибке Недопустимая команда \ database. Я также попытался с "" вокруг этого.
dazz

23
@Dazz Вы должны выполнить эту команду из командной строки (Пуск -> Выполнить -> cmd), а не из приглашения postgres.
Джейкоб

2
если я запускаю его из cmd, я получаю оператор '<' зарезервирован для будущего использования. '
Dazz

3
@Dazz: Вы могли бы использовать -fпереключатель (или --file) тоже
Гжегож Шпетковски

47
psql --username = postgres имя базы данных <data_base_dump.sql
Maxence

356

Вот команда, которую вы ищете.

psql -h hostname -d databasename -U username -f file.sql

29
Хорошо, но лучше добавить также параметр «-L logfile.log» для записи выходных данных в файл.
Зерологико

2
Получение этого: «Входные данные представляют собой дамп пользовательского формата PostgreSQL. Используйте клиент командной строки pg_restore, чтобы восстановить этот дамп в базе данных».
Вайдан Али

3
Вы также можете:pg_restore -h hostname -d dbname -U username filename.sql
Фабио Араужо

115

Я считаю, что вы хотите запустить в PSQL:

\i C:/database/db-backup.sql

Пришлось использовать это, потому что eshell Emacs не поддерживает перенаправление ввода. Спасибо.
Дума

3
Обязательно сначала перейдите в базу данных с помощью \ c <
имя_базы_данных


50

Я не уверен, что это работает для ситуации OP, но я обнаружил, что выполнение следующей команды в интерактивной консоли было наиболее гибким решением для меня:

\i 'path/to/file.sql'

Просто убедитесь, что вы уже подключены к правильной базе данных. Эта команда выполняет все команды SQL в указанном файле.


1
Это решение сработало для меня, в то время как решение с наибольшим количеством голосов привело к ошибке "stdin is tty".
김민준

Как раз то, что я искал - способ выполнить скрипт из psqlкомандной строки. Спасибо!
вацуг

Просто хотел поблагодарить вас за это. Должен быть включен в правильный ответ.
PKHunter

это правильно, не используйте обратную косую черту в пути в Windows!
Erdinc Ay

также для Windows вам нужны двойные косые черты
CMAS

45

Работает довольно хорошо, в командной строке все аргументы обязательны, -W для пароля

psql -h localhost -U user -W -d database_name -f path/to/file.sql

23

Просто для забавы, если ваш дамп сжат, вы можете сделать что-то вроде

gunzip -c filename.gz | psql dbname

Как упоминал Джейкоб, документы PostgreSQL описывают все это довольно хорошо.



5

Вы можете сделать это в pgadmin3. Удалите схемы, которые содержатся в вашем дампе. Затем щелкните правой кнопкой мыши базу данных и выберите «Восстановить». Затем вы можете найти файл дампа.


2
Но кнопка «восстановить» недоступна даже после выбора файла .sql. Похоже, что этому программному обеспечению нужен какой-то другой файл - файл формата * .backup. Нажатие «help» в этом окне импорта ссылается на pg_restore - «... утилиту для восстановления базы данных PostgreSQL из архива, созданного pg_dump в одном из форматов, не содержащих текст». Файл sql, на который ссылается OP, представляет собой простой текстовый формат.
JosephK

5

Я заметил, что многие примеры слишком сложны для localhost, где во многих случаях существует просто пользователь postgres без пароля:

psql -d db_name -f dump.sql

5

Я пробовал много разных решений для восстановления моей резервной копии postgres. Я столкнулся с проблемами, в которых отказано в разрешении на MacOS, но решения, похоже, не работали.

Вот как я заставил это работать:

Postgres поставляется с Pgadmin4. Если вы используете macOS, вы можете нажатьCMD + SPACEи набрать, pgadmin4чтобы запустить его. Это откроет вкладку браузера в Chrome.

Если вы сталкиваетесь с ошибками, заставляющими pgadmin4 работать, попробуйте killall pgAdmin4 в своем терминале, а затем повторите попытку.


Шаги для получения pgadmin4 + резервного копирования / восстановления

1. Создайте резервную копию

Сделайте это, щелкнув правой кнопкой мыши базу данных -> «резервное копирование»

введите описание изображения здесь

2. Дайте файлу имя.

Как test12345. Нажмите кнопку резервного копирования. Это создает дамп двоичного файла, он не в .sqlформате

введите описание изображения здесь

3. Посмотрите, где он скачал

Там должно быть всплывающее окно в нижней части экрана. Нажмите на страницу «подробнее», чтобы увидеть, куда была загружена ваша резервная копия

введите описание изображения здесь

4. Найдите местоположение загруженного файла

В этом случае это /users/vincenttang

введите описание изображения здесь

5. Восстановите резервную копию из pgadmin

Если вы правильно выполнили шаги с 1 по 4, у вас будет восстановленный двоичный файл. Может случиться, что ваш коллега захочет использовать ваш файл восстановления на своей локальной машине. Сказал ли человек пойти в пгадмин и восстановить

Сделайте это, щелкнув правой кнопкой мыши базу данных -> «восстановить»

введите описание изображения здесь

6. Выберите поиск файлов

Убедитесь, что вы выбрали местоположение файла вручную, НЕ перетаскивайте файл в поля загрузки в pgadmin. Потому что вы столкнетесь с ошибками разрешений. Вместо этого найдите файл, который вы только что создали:

введите описание изображения здесь

7. Найти указанный файл

Возможно, вам придется изменить фильтр внизу на «Все файлы». Затем найдите файл, начиная с шага 4. Теперь нажмите правую нижнюю кнопку «Выбрать», чтобы подтвердить

введите описание изображения здесь

8. Восстановить указанный файл

Вы снова увидите эту страницу с выбранным местоположением файла. Идите вперед и восстановите его

введите описание изображения здесь

9. Успех

Если все хорошо, в правом нижнем углу должен появиться индикатор, показывающий успешное восстановление. Вы можете перейти к своим таблицам, чтобы увидеть, были ли данные восстановлены надлежащим образом в каждой таблице.

10. Если это не удалось:

В случае сбоя шага 9 попробуйте удалить старую общедоступную схему в вашей базе данных. Перейти к «Инструменту запроса»

введите описание изображения здесь

Выполните этот блок кода:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

введите описание изображения здесь

Теперь повторите шаги с 5 по 9, это должно сработать

Резюме

Вот как я должен был сделать резервную копию / восстановить свою резервную копию на Postgres, когда у меня были проблемы с разрешением ошибок и я не мог войти в систему как суперпользователь. Или установите учетные данные для чтения / записи, используя chmodдля папок. Этот рабочий процесс работает для дампа двоичного файла по умолчанию «Custom» из pgadmin. Я предполагаю .sql, что так же, но я еще не проверял, что


5

убедитесь, что база данных, в которую вы хотите импортировать, создана, затем вы можете импортировать дамп с помощью

sudo -u postgres -i psql testdatabase < db-structure.sql

Если вы хотите перезаписать всю базу данных, сначала удалите базу данных

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

а затем воссоздать его с

sudo -u postgres -i psql -c "create database testdatabase;"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.