【问题标题】:ERROR: character with byte sequence 0x9d in encoding "WIN1252" has no equivalent in encoding "UTF8" while loading backup错误:在加载备份时,编码“WIN1252”中字节序列为 0x9d 的字符在编码“UTF8”中没有等效项
【发布时间】:2021-06-29 02:15:17
【问题描述】:

我有一台 mac os 机器,我使用以下命令在其上备份了一个表

psql -h localhost -U prices_root -d prices_deb -c "\copy 
(SELECT feed_item_id, pubdate, link, guid, title, summary, content, author, feed_id from feed_items)   
TO 'prices_deb_feed_items_dump.csv' with (format csv,header true, delimiter '^');"

我的 feed_items 表具有以下结构

我的 Mac 机器已停止工作,我在 Windows 上使用相同的用户密码等再次创建了相同的数据库。我尝试使用以下命令从 CSV 数据转储中恢复该表中的数据

psql -h localhost -U ch_v3_root -d ch_v3_dev -c "\copy 
feed_items(feed_item_id,pubdate,link,guid,title,summary,content,author,feed_id) 
FROM 'prices_deb_feed_items_dump.csv' with (format csv,header true, delimiter '^');" 

它给了我这个错误

ERROR:  character with byte sequence 0x9d in encoding "WIN1252" has no equivalent in encoding "UTF8"
CONTEXT:  COPY feed_items, line 21

如果有人能帮我恢复这个数据库表,我将不胜感激。当我在 mac 上测试备份还原时,它运行良好。在 Windows 上,我不断收到此错误

【问题讨论】:

  • 您是否有可能在 Mac 上使用 WIN1252 编码的数据库,现在使用 UTF8 编码创建了数据库?
  • 你试过在windows机器上创建编码WIN1252的数据库,然后恢复备份吗?
  • 我猜问题是你的旧数据库编码不是 WIN1252,而是别的东西,但 pg_restore 认为它是。我在备份中找到了 9D,因为 9D 在 WIN1252 中没有字符,所以会引发错误。所以解决这个问题的最好方法是找出你在 Mac 上的 DB 编码。
  • 您可以使用CREATE DATABASE db_name ENCODING=encoding_name;为您的特定数据库定义编码
  • notepad++ 之类的工具可能会有所帮助,但不能保证:softwareengineering.stackexchange.com/questions/187169/…。也看看stackoverflow.com/questions/3710374/…

标签: postgresql psql database-backups data-recovery


【解决方案1】:

您需要使用与从 MacOS 计算机导出数据时相同的客户端编码。例如,如果是 Windows-1251,在 Windows 命令行上你可以这样做

set PGCLIENTENCODING=WIN1251
psql ... -c "\copy ..."

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多