Postgresql

如何在 vm 上恢復 pg_dump 文件

  • August 4, 2021

pg_dump我用using創建了一個轉儲,

sudo -u postgres pg_dump dbname > dbexport.psql

我試圖恢復那個轉儲,

sudo -u postgres pg_restore -d dbname < dbexport.psql

我在還原時出錯

pg_restore:

$$ archiver $$輸入文件似乎是文本格式轉儲。請使用 psql。

之後我輸入以下內容

sudo -i -u postgres psqldbname < dbexport.psql

我什麼也沒看到,只是一條新線等待更多輸入。沒有錯誤消息,所有表仍然是空的。只是一個等待更多輸入的新行。有人可以告訴我我做錯了什麼嗎?

這裡的問題是您可能有一個底層文件系統問題。如果您通過使用 重定向 STDIN 將文件通過管道傳輸到 psql 中< file,您將無法確定有關流的內容(例如行號)。您還依靠 shell 來告訴您錯誤,而不是 psql。而是嘗試使用-f flag

psql myDatabase -f myDump

只是為了更多的上下文,試試這個:

cat < file_does_not_exist

你會看到這樣的東西,

$ cat < file_does_not_exist
zsh: no such file or directory: file_does_not_exist

該錯誤來自zsh!而你的shell如果不是zsh,可能不會產生同樣的錯誤。它可能只是阻塞並等待文件被創建,或者訪問文件。

儘管有傳統觀點,但我懷疑這是一個螢幕截圖會有所幫助的情況。在我看來,您誤解瞭如何呼叫psql shell

你的終端看起來像這樣嗎?

在此處輸入圖像描述

您的命令sudo -i -u postgres psql使您進入互動式psql會話。TL;DR:您不再需要為所有內容psql開頭。

從外部(在您的預設 bash、zsh 或其他中),您可以使用<字元(在其他選項中,如[-f|--file]或管道)將文件內容輸入到psql.

然而,在互動式會話中,使用\i( \include) 元命令輸入文件。

在此處輸入圖像描述

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