【问题标题】:Moving PostgreSQL database fails on non-ascii characters with 'value too long'移动 PostgreSQL 数据库在“值太长”的非 ascii 字符上失败
【发布时间】:2009-12-03 20:10:56
【问题描述】:
# Dump my database to a tar file
pg_dump -f myDatabase.tar -F t -h myServer -U myUser -W -i myDatabase
# create a new database
createdb -h myServer -U myUser -T template0 myDatabaseCopy
# restore my database
pg_restore -d myDatabaseCopy -h myServer -U myUser myDatabase.tar

然后我收到此错误,整个表的导入失败。

psql:/home/me/myDatabase.tar:660266:错误:对于类型字符变化的值太长(100) 上下文:复制 myTable,第 591 行,列 myColumn:“国务院“伊拉克未来”项目的前成员,现在在大西洋海岸……”

那些帽子是那些烦人的单引号和双引号。在我看来,它们起初适合列中,但在导出/导入过程中的某个地方它们会扩展,然后不再适合字符可变(100)列。

我实际上是在我几乎没有权限的服务器上移动一个实时数据库,所以只有 sql 的解决方案会很棒。有没有办法做类似的事情

UPDATE myTable SET myColumn = removeNonAscii(myColumn) WHERE hasNonAscii(myColumn)

编辑: 哈贝明白了。我变了

createdb -h myServer -U myUser -T template0 myDatabaseCopy

createdb -h myServer -U myUser -T template0 -E UTF8 myDatabaseCopy

这样就成功了。

【问题讨论】:

    标签: postgresql encoding migration


    【解决方案1】:

    问题似乎是由数据库编码引起的。 例如,源数据库使用“UTF-8”编码,目标数据库使用更受限制的字符集,如“SQL_ASCII”。

    检查两个数据库的编码(\lpsql 实用程序有帮助)。 如果它们不同,请使用 -Exxx 选项重新创建目标数据库。

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 2018-04-08
      • 2016-06-13
      • 1970-01-01
      • 2014-08-12
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多