【问题标题】:Django Heroku Postgresql ERROR: invalid byte sequence for encoding "UTF8"Django Heroku Postgresql 错误:编码“UTF8”的字节序列无效
【发布时间】:2014-03-31 13:33:33
【问题描述】:

我正在使用 Django 和 Heroku Postgreql。我在默认数据库设置中同时使用英语和土耳其语。我的数据库在本地和 Heroku 上都没有问题。但是,当我尝试将数据库从本地转储并恢复到生产环境时出现错误。

psql -U user -d db_name -f "b003.dump"

psql:b003.dump:270: ERROR:  invalid byte sequence for encoding "UTF8": 0xa3

【问题讨论】:

    标签: django postgresql database-restore heroku-postgres


    【解决方案1】:

    第一个猜测:编码不匹配

    您的文件 b003.dump 不是 UTF-8 编码。

    您需要覆盖编码设置,为文件指定正确的文本编码。

    如果它有土耳其语文本,它可能是 iso-8859-9,尽管 0xa3 是许多 ISO-8859 编码中的英镑符号 (£)。

    试试:

    PGCLIENTENCODING="iso-8859-9" psql ....
    

    我还建议检查locale 命令的输出以查看您的系统默认编码是什么,并尝试猜测file -bi b003.dump 命令的输出。

    第二次猜测,cmets 透露file 输出后

    您的文件不是 SQL 脚本样式转储。它是一个 PostgreSQL 自定义数据库转储。这就是为什么file 说:

    b003.dump: PostgreSQL custom database dump - v1.12-0 
    

    使用pg_restore 命令恢复它。

    pg_restore -f b003.dump -d db_name -U user
    

    在某些时候,我想增强 psql 以便它告诉你这一点,而不是因为错误而失败。

    这里的奇怪之处在于,如果是自定义转储,那么在您在此处显示的错误之前,您一定有 很多 以前的错误。

    【讨论】:

    • 我收到此错误 psql:b003.dump:270: ERROR: syntax error at or near "" LINE 1: %/??F
    • 转储是从哪里来的?它来自哪个版本的 PostgreSQL,您要将它恢复到哪个版本?这表明转储文件实际上可能已损坏。另外,file -bi b003.dump 的输出是什么?
    • 我的本地数据库是:x86_64-apple-darwin13.1.0 上的 PostgreSQL 9.3.4,由 Apple LLVM 版本 5.1 (clang-503.0.38)(基于 LLVM 3.4svn)编译,64 位但是转储来自 Heroku Postgres
    • 第二个问题,file -bi b003.dump 输出?您还应该检查转储的第 270 行是什么。
    • file -bi b003.dump >>> 常规文件和文件 b003.dump >>> b003.dump: PostgreSQL 自定义数据库转储 - v1.12-0
    【解决方案2】:

    正如上面的答案所指出的,该文件是一个 postgres 自定义转储,可以通过以下命令恢复: pg_restore dump_file -d db_name -U 用户

    http://www.postgresql.org/docs/9.2/static/app-pgrestore.html

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 2022-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 2021-08-19
      • 2021-05-01
      相关资源
      最近更新 更多