Postgresql

pg_restore 到一個新的數據庫

  • April 2, 2020

我正在使用 Heroku 的 Postgres 選項,並從中下載了一個備份。我想把它恢復到一個新的數據庫中,這樣我就可以查看它了。我一直在嘗試不同的命令,但無濟於事。我的第一次嘗試:

$ sudo -u postgres psql < db/backups/myapp_2018-05-27.pg.dump 
The input is a PostgreSQL custom-format dump.
Use the pg_restore command-line client to restore this dump to a database.

所以我嘗試:

$ sudo -u postgres pg_restore -d myapp3 -C db/backups/myapp_2018-05-27.pg.dump
pg_restore: [archiver (db)] connection to database "myapp3" failed: FATAL:  database "myapp3" does not exist

我真的不明白這個-C選項

-C –創建

在還原到數據庫之前創建數據庫。如果還指定了 –clean,則在連接到它之前刪除並重新創建目標數據庫。

使用此選項時,以 -d 命名的數據庫僅用於發出初始 DROP DATABASE 和 CREATE DATABASE 命令。所有數據都恢復到存檔中出現的數據庫名稱中。

恢復到新數據庫對我來說似乎是合乎邏輯的。我離題了……(也許這在這裡得到了正確的解釋)

我嘗試從另一個具有相同架構的較早的模板創建一個新數據庫:

$ sudo -u postgres createdb -T myapp myapp3

$ sudo -u postgres pg_restore -d myapp3 -C db/backups/myapp_2018-05-27.pg.dump
pg_restore: [archiver (db)] Error while PROCESSING TOC:

<snip>

WARNING: errors ignored on restore: 5

我收到很多關於不存在且未插入數據的使用者的錯誤。

template0正如我所料,我也嘗試過使用,但這會引發有關架構的錯誤。

總之,我想從 Heroku Pg 備份恢復到一個新的數據庫。我不知道如何避免有關索引和失去使用者等的錯誤準備好架構。

-O由於文件中的這一行,我也嘗試過:

使用 -O,任何使用者名都可以用於初始連接,並且該使用者將擁有所有創建的對象。

我似乎也誤解了這一點,因為螢幕再次充滿了錯誤。


編輯:根據-C連結的答案,我設法恢復到一個神秘命名的數據庫,但是當我執行重命名數據庫命令(alter database rtyghjkuyhgh rename to my_app3)時,它會清空所有數據:(


任何幫助或見解,即使只是正確方向的一點,都將非常感激。

Postgres 版本 9.5.12

讓我們定義幾個變數,使其餘的更容易複製/粘貼(使用原始問題中的名稱)

old_db=myapp
new_db=myapp3
db_dump_file="backups/myapp_2018-05-27.pg.dump"

以下假設您的備份是使用“自定義”格式創建的,如下所示:

pg_dump -U postgres -F custom "$old_db" > "$db_dump_file"

要恢復$db_dump_file到新的數據庫名稱$new_db

dropdb   -U postgres --if-exists  "$new_db"
createdb -U postgres -T template0 "$new_db"

pg_restore -U postgres -d "$new_db" "$db_dump_file"

1)首先切換到超級使用者su - postgres

  1. 然後創建了一個新的數據庫createdb myapp3 ——已經創建了 DROP

3)現在將director更改為備份文件路徑,即cd db/backups/

4)現在只需執行它來恢復你的轉儲自定義文件

pg_restore -j 8 -U postgres -d myapp3 myapp_2018-05-27.pg.dump

  1. 如果仍然無法恢復數據庫,請使用新的 bkup

pg_dump -U postgres -Fc myapp3 > myapp_2018-05-27.dump

刪除 .pg 並嘗試再次恢復。

引用自:https://dba.stackexchange.com/questions/207993