在带有';的非ascii字符上移动PostgreSQL数据库失败;值太长';

在带有';的非ascii字符上移动PostgreSQL数据库失败;值太长';,postgresql,encoding,migration,Postgresql,Encoding,Migration,然后我得到这个错误,整个表的导入失败 psql:/home/me/myDatabase.tar:660266:错误:值太长,无法更改类型字符(100) 背景:复制myTable,第591行,myColumn列:“前国务院“伊拉克的未来”项目成员,现在在大西洋议会……” 那些帽子是那些恼人的卷曲单引号和双引号。在我看来,它们一开始适合列,但在导出/导入过程中的某个地方,它们会展开,然后不再适合字符变化(100)列 我实际上是在一台我没有权限的服务器上移动一个实时数据库,所以一个纯sql的解决方案会

然后我得到这个错误,整个表的导入失败

psql:/home/me/myDatabase.tar:660266:错误:值太长,无法更改类型字符(100) 背景:复制myTable,第591行,myColumn列:“前国务院“伊拉克的未来”项目成员,现在在大西洋议会……”

那些帽子是那些恼人的卷曲单引号和双引号。在我看来,它们一开始适合列,但在导出/导入过程中的某个地方,它们会展开,然后不再适合字符变化(100)列

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

# 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
编辑: 哈贝明白了。我变了

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


这就成功了。

问题似乎是由数据库编码引起的。 例如,源数据库以“UTF-8”编码,目标数据库以更严格的字符集(如“SQL\U ASCII”)编码

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

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