Імпортуйте дамп SQL у базу даних PostgreSQL


451

Ми перемикаємо хости, і старий забезпечив скидання 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, але я отримую помилку Недійсна команда \ база даних. Я також спробував "" навколо цього.
сліп

23
@Dazz Ви повинні виконати цю команду з командного рядка (Пуск -> Виконати -> cmd), а не з рядка postgres.
Яків

2
якщо я запускаю його з cmd, я отримую оператор '<', зарезервований для подальшого використання. '
сліп

3
@Dazz: Ви також можете використовувати -fперемикач (або --file)
Grzegorz Spepetkowski,

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

356

Ось команда, яку ви шукаєте.

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

29
Добре, але краще додати також парам "-L logfile.log", щоб записати висновок у файл.
zerologiko

2
отримання цього "Вхід - це дамп спеціального формату PostgreSQL. Використовуйте клієнт командного рядка pg_restore для відновлення цього дампа до бази даних."
Вайдан Алі

3
Ви також можете:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo

114

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

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

Довелося використовувати це, тому що ешел Emacs не підтримує перенаправлення вводу. Дякую.
дума

3
Обов’язково спочатку перейдіть до бази даних \ c <database_name>
hkong


49

Я не впевнений, чи працює це для ситуації з ОП, але я виявив, що виконання наступної команди в інтерактивній консолі було найбільш гнучким рішенням для мене:

\i 'path/to/file.sql'

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


1
Це рішення спрацювало для мене, тоді як найбільш голосоване рішення призвело до помилки "stdin - це не tty".
김민준

Якраз те, що я шукав - спосіб виконати скрипт із psqlкомандного рядка. Дякую!
вацуг

Просто хотів подякувати за це. Слід включити до правильної відповіді.
PKHunter

це правильно, не використовуйте зворотні косої риски на шляху у вікнах!
Erdinc Ай

також для Windows вам потрібні подвійні нахили вперед
CMAS

44

Працює досить добре, в командному рядку потрібні всі аргументи, -W - це пароль

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

22

Тільки для прихисток, якщо ваш смітник стиснений, ви можете зробити щось на кшталт

gunzip -c filename.gz | psql dbname

Як згадував Якоб, документи PostgreSQL досить добре описують це.



4

Ви можете це зробити в pgadmin3. Відкиньте схеми, які містять ваш дамп. Потім клацніть правою кнопкою миші на базі даних та оберіть Відновити. Потім ви можете переглянути файл дампа.


2
Але кнопку "відновити" не можна натискати навіть після вибору файлу .sql. Це програмне забезпечення, схоже, хоче ще якийсь файл - файл із форматом * .backup. Клацання "довідки" у цьому поле імпорту посилається на pg_restore - "... утиліта для відновлення бази даних PostgreSQL з архіву, створеного pg_dump, в одному з непрості текстових форматів." Файл sql, на який посилається ОП, є звичайним текстовим форматом.
ДжозефК

4

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

psql -d db_name -f dump.sql

4

переконайтеся, що створена база даних, до якої потрібно імпортувати, і тоді ви можете імпортувати дамп

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;"

2

Я спробував багато різних рішень для відновлення резервного копіювання постгрес. Я зіткнувся з дозволом, який заперечував проблеми на MacOS, але рішення, здавалося, не спрацювало.

Ось як я змусив його працювати:

Postgres поставляється з Pgadmin4. Якщо ви використовуєте macOS, ви можете натиснути CMD+ SPACEта ввести його pgadmin4для запуску. Це відкриє вкладку браузера в хромі.

Якщо у вас виникли помилки, коли pgadmin4 працює, спробуйте killall pgAdmin4у своєму терміналі, а потім повторіть спробу.


Кроки до отримання pgadmin4 + резервного копіювання / відновлення

1. Створіть резервну копію

Зробіть це, натиснувши правою кнопкою миші базу даних -> "резервна копія"

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

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

Як test12345. Клацніть резервну копію. Це створює дамп двійкового файлу, він не у .sqlформаті

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

3. Подивіться, де це завантажено

У нижній частині екрана має бути спливаюче вікно. Клацніть на сторінці "Докладніші відомості", щоб побачити, куди завантажено резервну копію

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

4. Знайдіть місце завантаженого файлу

У цьому випадку це /users/vincenttang

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

5. Відновіть резервну копію з pgadmin

Якщо припустити, що ви зробили кроки 1 - 4 правильно, у вас з'явиться двійковий файл відновлення. Можливо, настане час, коли ваш колега захоче використати файл відновлення на локальній машині. Сказали людині піти на pgadmin та відновити

Зробіть це, натиснувши правою кнопкою миші базу даних -> "відновити"

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

6. Виберіть файл пошуку

Переконайтесь, що виберіть розташування файлу вручну, НЕ перетягуйте файл на поля завантажувача в pgadmin. Тому що ви матимете права на помилки. Замість цього знайдіть створений вами файл:

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

7. Знайдіть згаданий файл

Можливо, вам доведеться змінити фільтр внизу на "Усі файли". Знайдіть файл згодом, починаючи з кроку 4. Тепер натисніть праву кнопку "Вибрати" для підтвердження

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

8. Відновіть згаданий файл

Ви знову побачите цю сторінку з вибраним місцеположенням файлу. Ідіть і відновіть його

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

9. Успіх

Якщо все добре, праворуч внизу слід ввести індикатор, що показує успішне відновлення. Ви можете перейти до своїх таблиць, щоб побачити, чи відновлено дані в кожній таблиці.

10. Якщо це не вдалося:

Якщо крок 9 провалиться, спробуйте видалити стару загальнодоступну схему з вашої бази даних. Перейдіть до "Інструменту запитів"

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

Виконати цей код коду:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

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

Тепер спробуйте кроки 5 - 9 знову, це має спрацювати

Підсумок

Ось як мені довелося створити резервну копію / відновити резервну копію на Postgres, коли у мене виникли проблеми з дозволом на помилки та не вдалося увійти як супервайзер. Або встановити облікові дані для читання / запису, використовуючи chmodдля папок. Цей робочий процес працює для демпінгу двійкового файлу за замовчуванням "Custom" від pgadmin. Я припускаю .sql, що так само, але я ще цього не перевіряв

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.