Postgresql

pg_restore:一個rchiver一種rCH一世v和rarchiver在文件頭中沒有找到魔術字元串

  • February 9, 2019

我正在使用 PostgreSQL 9.1 並希望恢復使用以下命令生成的備份文件pg_dump

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

該命令生成一個有效的 sql 文件,該文件首先刪除任何現有的數據庫對象,然後生成所有表、索引、序列等,最後插入數據。

當我嘗試使用以下命令恢復生成的備份文件時:(添加換行符僅用於顯示目的)

sudo pg_restore 
   -d database_name -h 127.0.0.1 -U postgres
   --format=c --clean --create out.sql

它失敗並列印:

pg_restore: [archiver] did not find magic string in file header

這是什麼原因?

您正在恢復,pg_restore --format=c ...但未pg_dump完成--format=c,它是使用預設的 格式完成的。

pg_dump手冊頁:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

應將純格式的轉儲直接提供給psql命令行工具,pg_restore不知道它是什麼,這就是此錯誤消息的原因:沒有在文件頭中找到魔術字元串

您可以使用 in shell 直接查看轉儲文件,more out.sql您將看到可讀的 SQL 命令。用 恢復它psql -f out.sql [other options]。您可能希望首先創建目標數據庫,因為呼叫--create中不存在該選項。pg_dump

另一方面,您可以重新呼叫轉儲--format=c以添加其選項。那麼情況正好相反:pg_restore必須用於解釋自定義格式的轉儲文件。

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