pg_restore 到一個新的數據庫
我正在使用 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
- 然後創建了一個新的數據庫
createdb myapp3
——已經創建了 DROP3)現在將director更改為備份文件路徑,即
cd db/backups/
4)現在只需執行它來恢復你的轉儲自定義文件
pg_restore -j 8 -U postgres -d myapp3 myapp_2018-05-27.pg.dump
- 如果仍然無法恢復數據庫,請使用新的 bkup
pg_dump -U postgres -Fc myapp3 > myapp_2018-05-27.dump
刪除 .pg 並嘗試再次恢復。