Відновити файл резервного копіювання postgres за допомогою командного рядка?


294

Я новачок у postgresql, і локально використовую pgadmin3. На віддаленому сервері, однак, у мене немає такої розкоші.

Я вже створив резервну копію бази даних і скопіював її, але чи є спосіб відновити резервну копію з командного рядка? Я бачу лише речі, пов’язані з графічним інтерфейсом або з pg_dumps, тому, якщо хтось може сказати мені, як це зробити, це було б приголомшливо!

Відповіді:


366

Існує два інструменти для перегляду, залежно від того, як ви створили дамп-файл.

Вашим першим джерелом посилання має бути сторінка man, pg_dump(1)оскільки саме це створює дамп. Він говорить:

Дампи можуть виводитися у форматах скриптів або архівів. Дамп скриптів - це текстові файли, що містять команди SQL, необхідні для реконструкції бази даних до стану, в якому вона знаходилася під час її збереження. Щоб відновити з такого сценарію, подайте його до psql (1). Файли сценаріїв можна використовувати для реконструкції бази даних навіть на інших машинах та інших архітектурах; з деякими модифікаціями навіть на інших продуктах баз даних SQL.

Альтернативні формати файлів архіву повинні бути використані разом з pg_restore (1) для відновлення бази даних. Вони дозволяють pg_restore вибирати те, що відновлено, або навіть впорядкувати елементи до відновлення. Формати файлів архіву розроблені так, щоб вони переносилися в архітектурах.

Так залежить від способу його викидання. Ви, ймовірно, можете це зрозуміти, використовуючи відмінну file(1)команду - якщо в ньому згадується текст ASCII та / або SQL, його слід відновити, psqlінакше слід, ймовірно, використовуватиpg_restore

Відновлення досить легко:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

або

pg_restore -U username -d dbname -1 filename.dump

Ознайомтеся з відповідними вікнами - існує досить багато варіантів, які впливають на роботу відновлення. Можливо, вам доведеться очистити свої "живі" бази даних або відтворити їх з template0 (як зазначено в коментарі) перед відновленням, залежно від способу створення звалищ.


3
IME ви практично завжди хочете відновити у новоствореній із шаблону0 базі даних. В іншому випадку, якщо ви зробили щось подібне до активації plpgsql в template1, процес відновлення спробує зробити це ще раз, і перемикач -1, який ви запропонуєте, означає, що вся транзакція вийде з ладу. Тож щось на кшталт "createdb -T template0 seo2" з подальшим "pg_restore -v -d seo2 seo.pg" для відновлення seo.pg (зроблено з бази даних seo) у нову базу даних seo2. Якщо ваш резервний файл - це просто .sql файл, ви можете вручну обрізати суперечливі біти.
araqnid

61
Ви не можете мати -dі -fодночасно. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner

8
У версії 9.2 параметр "-f" вказує вихідний файл, а не дамп-файл (і він, мабуть, означає те саме в попередніх версіях).
Девід Реснік

4
Щодо cannot be used togetherдивіться тут: stackoverflow.com/questions/27882070/…
Абдул

3
@ Alex78191 це означає, що він виконується як одна операція, яка може повністю відмовитись і відкататись, або пройти через неї. Це також заблокує деякий доступ до бази даних.
АТН

216

створити резервну копію

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c - власний формат (стискається та може робити паралельно з -j N) -b включає крапки, -v - багатослівний, -f - ім'я файлу резервного копіювання

відновити з резервного копіювання

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

важливо встановити -h localhost - варіант


2
Я хотів би відзначити , що , перш ніж виконати ці команди , які повинні бути розташовані в PosgreSQL бен папці. Наприклад, у Windows (якщо ви встановили його в папці за замовчуванням), це було б C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

Можливо, вам потрібно буде увійти як postgresдля того, щоб мати повні привілеї в базах даних.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

перемикач -Fвказує формат файлу резервної копії:

  • c буде використовуватися спеціальний формат PostgreSQL, який стискається і призводить до найменшого розміру резервного файлу
  • d для каталогу, де кожен файл - одна таблиця
  • t для архіву TAR (більший за нестандартний формат)
  • -h/ --hostВказує ім'я хоста машини, на якій працює сервер
  • -W/ --passwordЗмусити pg_dumpзапросити пароль перед підключенням до бази даних

відновити резервну копію:

   pg_restore -d database_name -U username -C backup.dump

Параметр -Cповинен створити базу даних перед імпортом даних. Якщо це не працює, ви завжди можете створити базу даних, наприклад. з командою (як користувач postgresабо інший обліковий запис, який має права створювати бази даних)createdb db_name -O owner

pg_dump / psql

У випадку, якщо ви не вказали аргумент, -Fвикористовувався звичайний текст у форматі звичайного тексту SQL (або з -F p). Тоді ви не можете використовувати pg_restore. Ви можете імпортувати дані за допомогою psql.

резервне копіювання:

pg_dump -U username -f backup.sql database_name

відновлення:

psql -d database_name -f backup.sql

Я використовував команду "psql -d database_name -f backup.sql", щоб відновити базу даних, яку я скинув з dokku на DigitalOcean. Працювали чудово.
NineBlindEyes

1
під час використання psql, якщо у вашого користувача (наприклад postgres) встановлений пароль, тоді -Wслід використовувати опцію. Наприклад, наприклад, на Ubuntu, не роблячи su postgresмісця з терміналу, $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlце команда, яка працювала для мене, щоб відновити резервну копію на мій localhost. Зверніть увагу, що -hпотрібен варіант.
Jignesh Gohel

@JiggneshhGohel Як говорить посібник: -Wваріант ніколи не є важливим. pg_dumpавтоматично запропонує ввести пароль, якщо сервер вимагає автентифікації пароля. Також ви можете використовувати PGPASSWORDзмінну env, якщо ви використовуєте звичайні текстові паролі. -hпотрібен, якщо за замовчуванням PGHOSTне застосовується. Ці параметри є загальними для багатьох утиліт PostgreSQL, тому не важливо відповідати на це питання (це сильно залежить від вашої установки).
Томбарт

@Tombart ваша pg_dump/psqlчастина 2-го варіанту - це робота для мене. але перша частина pg_dump/pg_restoreне працює для відновлення. Дякую.
Anjan Biswas

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

60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

введіть пароль користувача і натисніть клавішу Enter.

ВІДНОВЛЕННЯ:

psql -U user db_name < /directory/archive.sql

введіть пароль користувача і натисніть клавішу Enter.


31

Нижче наведена моя версія, pg_dumpяку я використовую для відновлення бази даних:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

або використовувати psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

де -hхост, -pпорт, -uім’я для входу, -dім'я бази даних


2
Говінд Сінгх, чому ти змінив мою відповідь? ваші зміни не приносять нічого нового ..
Yahor M

1
my_new_databaseповинні вже існувати при використанні psql, ні?
Elmex80s

22

Резервне копіювання та відновлення за допомогою GZIP

Для бази даних великих розмірів це дуже добре

резервне копіювання

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

відновлення

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html


1
Для ubuntu ви можете використовувати: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlЩоб отримати дозволи на роботу з базою даних. Також врахуйте --cleanпрапор, коли демпінг може видалити всі наявні дані.
Себастьян

Працює чудове і акуратне рішення для мене. Дякую!
Нам Г ВУ


8

Це працювало для мене:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

Дякую, --no-ownerсправді мені допомогли.
bonafernando

7

1.відкрийте термінал.

2.Завантажте базу даних за допомогою наступної команди

Ваш кошик для постів - /opt/PostgreSQL/9.1/bin/

ваш сервер бази даних - 192.168.1.111

розташування та ім’я резервного файлу - /home/dinesh/db/mydb.backup

ваше джерело db імені - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --користувач "postgres" --no-пароль --форматувати на замовлення --blobs --file "/ home / dinesh / db /mydb.backup "" база даних "

3.установіть файл mydb.backup в пункт призначення.

ваш сервер призначення - localhost

назва вашої бази даних - моя база даних

створити базу даних для відновлення резервної копії.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "Створити базу даних моїх даних"

відновити резервну копію.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --користувач "postgres" --dbname "mydatabase" --no-password --clean "/ home / dinesh / db / mydb. резервне копіювання "


4

Якщо ви створюєте резервну копію за допомогою pg_dump, ви можете легко відновити її наступним чином:

  1. Відкрити вікно командного рядка
  2. Перейдіть у папку для сміття Postgres. Наприклад: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Введіть команду відновлення вашої бази даних. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Введіть пароль для користувача postgres
  5. Перевірте процес відновлення

4

1) Відкрити термінал psql.

2) Розпакуйте / зніміть знімок файлу дампа.

3) Створіть порожню базу даних.

4) скористайтеся наступною командою для відновлення .dump-файлу

<database_name>-# \i <path_to_.dump_file>


3

Як сказано нижче посилання, ви можете використовувати команду psql для відновлення дамп-файлу:

https://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE

psql dbname < infile

якщо вам потрібно встановити ім'я користувача, просто додайте ім'я користувача після команди типу:

psql dbname < infile username


2

Відновлення файлу резервної копії postgres залежить від того, як ви взяли резервну копію.

Якщо ви використовували pg_dump з -F c або -F d, вам потрібно використовувати pg_restore, інакше ви можете просто використовувати

psql -h localhost -p 5432 -U postgres <резервна копія

9 способів резервного копіювання та відновлення баз даних постгресів


Чи розумієте ви, що ви пропустили частину імені бази даних, і вона скаржиться на те, що база призначення не існує?
Пере

2

Спробуйте перевірити, чи можуть вам допомогти наступні команди:

sudo su - yourdbuser
psql
\i yourbackupfile

2

Вибачте за некропост, але ці рішення для мене не спрацювали. Я на postgres 10. У Linux:

  1. Мені довелося змінити каталог на свій pg_hba.conf.
  2. Мені довелося відредагувати файл, щоб змінити метод з peer на md5, як зазначено тут
  3. Перезапустіть службу: service postgresql-10 restart
  4. Змініть каталог, де був мій backup.sql, і виконати:
    psql postgres -d database_name -1 -f backup.sql

    -database_name - це назва моєї бази даних

    -backup.sql - це мій файл резервного копіювання .sql.


1

У мене виникли проблеми з аутентифікацією під керуванням pg_dump, тому я перемістив свій файл демп

mv database_dump /tmp

в темп-каталог, а потім біг

su -u postgres
cd /tmp
pg_restore database_dump

Якщо у вас великий дамп бази даних, ви можете просто створити інший каталог, де ваш поточний користувач і користувач postgres можуть отримати доступ до цього файлу і скинути файл дамп-бази даних.


1

Якщо у вас є резервний файл SQL, ви можете легко відновити його. Просто дотримуйтесь інструкцій, наведених нижче

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

Введіть пароль для користувача postgres, якщо потрібно, і дозвольте Postgres виконувати свою роботу. Потім ви можете перевірити процес відновлення.


0

Якщо ви хочете створити резервну копію даних або відновити дані з резервної копії, можете виконати такі команди:

  1. Щоб створити резервну копію даних, перейдіть до каталогу postgres \ bin \, C:\programfiles\postgres\10\bin\а потім введіть таку команду:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Щоб відновити дані з резервної копії, перейдіть до каталогу postgres \ bin \, C:\programfiles\postgres\10\bin\а потім введіть команду нижче:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    Переконайтесь, що існує файл резервної копії.


-3

Нижче див. Приклад його роботи

C: / Файли програми / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --використовувати ім'я "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Користувачі \ Йогеш \ Завантаження \ Новий Завантажити \ DB.backup "

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