【发布时间】: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