Postgresql
pg_restore:一個rchiver一種rCH一世v和rarchiver在文件頭中沒有找到魔術字元串
我正在使用 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
必須用於解釋自定義格式的轉儲文件。