Mover o banco de dados PostgreSQL falha em caracteres não-ascii com 'valor muito longo'
# 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
Então eu recebo este erro, e a importação falha para uma tabela inteira.
psql: /home/me/myDatabase.tar: 660266: ERRO: valor muito longo para o caractere de tipo variável (100) CONTEXTO: COPY myTable, linha 591, coluna myColumn: "Um antigo membro do projeto Departamento de Estado do Futuro do Iraque e agora no Cou do Atlântico ... "
Aqueles hat-a são aquelas cotações simples e duplas encaracoladas irritantes. Parece-me que eles se encaixam na coluna em primeiro lugar, mas em algum lugar no processo de exportação / importação eles se expandem e, em seguida, não cabem mais na coluna variando de caractere (100).
Eu estou realmente movendo um banco de dados ao vivo em um servidor que tenho pouca permissão para, então uma solução somente sql seria ótimo. Existe uma maneira de fazer algo como
UPDATE myTable SET myColumn = removeNonAscii(myColumn) WHERE hasNonAscii(myColumn)
EDIT: habe conseguiu. eu mudei
createdb -h myServer -U myUser -T template0 myDatabaseCopy
para
createdb -h myServer -U myUser -T template0 -E UTF8 myDatabaseCopy
e isso fez o truque.