1

今天早些時候,我試圖使用pgAdmin III從生產中恢復我的PostgreSQL(8.1.22)數據庫。然而,恢復過程完成後,它開始拋出錯誤,如:恢復PostgreSQL數據庫時出錯「無效的字節序列」

WARNING: errors ignored on restore: 4 

此外,在調查中,我發現了所有的表3表尚未恢復的(包含0行)。當我檢查了日誌,我發現了3臺附近的follwoing錯誤:

pg_restore: [archiver (db)] Error from TOC entry 5390; 0 442375 TABLE DATA tablename postgres 
pg_restore: [archiver (db)] COPY failed: ERROR: invalid byte sequence for encoding "UTF8": 0xea0942 
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". 
CONTEXT: COPY tablename , line 7875 

我想研究我在谷歌問題,但沒有結果。請幫助恢復這三張表而不出錯。

回答

11

舊版本的PostgreSQL對UTF-8合規性的要求不如新版本嚴格。 大概你試圖從這樣一箇舊版本恢復包含無效的UTF-8的數據到一個更新的版本。

必須清理無效的字符串。您可以遵循,這不是進口的,由於這些錯誤的每個表的過程:

  1. 提取從轉儲文件表的內容轉換爲SQL純文本文件:

    pg_restore --table=tablename --data-only dumpfile >plaintext.sql 
    
  2. 在文本編輯器iconv刪除無效字符或自動:

    iconv -c -f UTF-8 -t UTF-8 <plaintext.sql >plaintext-cleaned.sql 
    
  3. 導入殺毒的數據:

    psql dbname < plaintext-cleaned.sql 
    
相關問題