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

avatar
dazz
27 июля 2011 в 09:50
817524
16
552

Мы меняем хосты, и старый предоставил дамп 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...
        ^

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

Источник
owensmartin
10 августа 2016 в 23:26
0

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

Ответы (16)

avatar
Jacob
27 июля 2011 в 09:57
862
psql databasename < data_base_dump

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

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

dazz
27 июля 2011 в 10:05
2

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

Frank Schmitt
27 июля 2011 в 10:45
0

Вы пробовали перейти к C: \ database и вызвать psql mydatabase <db-backup.sql?

Jacob
27 июля 2011 в 10:48
27

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

dazz
27 июля 2011 в 10:54
3

если я запускаю его из cmd, я получаю «Оператор« <»зарезервирован для использования в будущем».

Grzegorz Szpetkowski
27 июля 2011 в 10:56
4

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

Jacob
27 июля 2011 в 10:56
2

Не может быть. Ошибка, которую вы цитируете, вызвана PowerShell, а не командной строкой Windows. Вы вводите команду не в ту оболочку.

dazz
27 июля 2011 в 11:24
0

Да, PowerShell, но это работает. У меня все заработало: psql -f sdb-backup.sql mydatabase;

Stephen Nguyen
13 июня 2013 в 18:01
0

этот документ является хорошим справочником по работе с базами данных posgres postgresql.org/docs/9.1/static/backup-dump.html "pg_dump dbname> outfile" "gunzip -c filename.gz | psql dbname"

Maxence
18 июня 2013 в 18:27
62

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

user151496
15 декабря 2016 в 10:44
1

ownerit сообщает, что аутентификация однорангового узла не удалась. даже если я введу правильный пароль :(

Kyle Kwon
23 февраля 2017 в 17:22
0

это решение сработало для меня, но только после того, как я сбросил свою базу данных (используя rake db:drop) и сначала создал ее (используя rake db:create) (как @jacob упоминает выше). потом запустил миграцию, и все готово.

Milan Velebit
3 октября 2017 в 22:54
0

@ user151496 Вы должны сменить текущего пользователя. Если вы используете одноранговую аутентификацию, Postgre будет считать, что ваш пользователь является текущим пользователем вашей ОС. Экспортируйте PGUSER env var (установите его как предпочитаемое имя пользователя db) и также настройте файл ~ / .pgpass. Это должно решить ваши проблемы.

Vikas Prasad
6 марта 2018 в 11:22
0

для поиска текущей базы данных используйте select current_database(); в psql

Wajdan Ali
10 сентября 2018 в 13:31
0

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

tensojka
9 октября 2018 в 21:15
1

Если вы импортируете большой дамп, не забудьте обернуть дамп в BEGIN TRANSACTION и COMMIT, чтобы psql не фиксировался после каждой строки.

Alexander Vidaurre Arroyo
28 апреля 2021 в 16:03
0

Привет, возможно исключить конкретную таблицу в существующем файле data_base_dump

testing_22
3 октября 2021 в 21:25
0

Более короткая форма: psql -U postgres databasename < data_base_dump.sql

avatar
davidauza.engineer
7 января 2021 в 17:32
5

Если вы используете файл с расширением .dump, используйте:

pg_restore -h hostname -d dbname -U username filename.dump

theodory
2 февраля 2021 в 12:10
1

Это решило мою проблему с импортом

avatar
Mohd Tauovir Khan
29 июля 2020 в 18:53
0

У меня было больше 100 МБ данных, поэтому я не мог восстановить базу данных с помощью Pgadmin4.

Я использовал просто клиент postgres и напишу команду ниже.

postgres @ khan: / $ pg_restore -d имя_базы_данных /home/khan/Downloads/dump.sql

Он работал нормально и занял несколько секунд. Вы можете увидеть ссылку ниже для получения дополнительной информации. https://www.postgresql.org/docs/8.1/app-pgrestore.html

avatar
burney
13 июля 2020 в 09:07
0

Postgresql12

из файла sql: pg_restore -d база данных <file.sql

из файла пользовательского формата: pg_restore -Fc database <file.dump

avatar
AConsumer
30 июня 2020 в 04:55
6

Выполните следующие действия:

  1. Перейдите в оболочку psql
  2. \c db_name
  3. \i path_of_dump [например: -C: /db_name.pgsql]
avatar
rubo77
30 декабря 2019 в 12:24
9

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

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;"
avatar
Vincent Tang
31 октября 2019 в 03:19
8

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

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

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

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


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

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

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

enter image description here

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

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

enter image description here

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

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

.

enter image description here

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

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

enter image description here

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

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

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

enter image description here

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

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

enter image description here

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

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

enter image description here

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

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

enter image description here

9. Успех

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

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

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

enter image description here

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

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

enter image description here

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

Сводка

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

avatar
Kiryl Plyashkevich
14 сентября 2018 в 10:53
6

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

psql -d db_name -f dump.sql
avatar
Feuda
16 декабря 2016 в 11:05
47

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

psql -h localhost -U user -W -d database_name -f path/to/file.sql
avatar
alan
27 мая 2015 в 18:26
23

Для шуток, если ваш дамп сжат, вы можете сделать что-то вроде

gunzip -c filename.gz | psql dbname

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

avatar
Vajira Lasantha
25 мая 2015 в 23:18
9

Я использую:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Надеюсь, это кому-то поможет.

avatar
rockusbacchus
17 мая 2015 в 14:09
56

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

\i 'path/to/file.sql'

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

김민준
25 ноября 2016 в 07:56
2

Это решение сработало для меня, в то время как решение, получившее наибольшее количество голосов, выдало ошибку «stdin is not a tty».

vatsug
10 февраля 2017 в 09:43
0

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

PKHunter
15 августа 2017 в 20:46
0

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

Erdinc Ay
18 апреля 2018 в 18:54
0

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

CMAS
17 августа 2018 в 13:56
0

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

questionto42
24 июля 2021 в 12:30
0

Это повторяет трехлетний ответ @ArranUbels.

avatar
ivanacorovic
28 октября 2014 в 13:56
60

У меня сработало:

sudo -u postgres psql db_name < 'file_path'
avatar
Vanessa MacDougal
16 апреля 2014 в 17:50
5

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

JosephK
5 марта 2017 в 12:28
2

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

avatar
Gabriel Ramirez
3 октября 2013 в 18:55
420

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

psql -h hostname -d databasename -U username -f file.sql
zerologiko
12 февраля 2014 в 09:29
36

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

Wajdan Ali
10 сентября 2018 в 13:34
2

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

Fábio Araújo
7 августа 2019 в 18:20
7

Вы также можете: pg_restore -h hostname -d dbname -U username filename.sql

gogofan
10 июля 2020 в 14:16
0

Как быть с ERROR: duplicate key value violates unique constraint? Я бы хотел, чтобы psql игнорировал повторяющийся ключ

avatar
Arran Ubels
20 августа 2012 в 05:27
132

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

\i C:/database/db-backup.sql
duma
30 марта 2013 в 03:11
0

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

hkong
18 августа 2016 в 00:54
6

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

Yordan Grigorov
8 января 2021 в 22:34
0

используйте \ ir, если хотите указать относительный путь.