2009-12-03 1 views
5
# 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 

Ensuite, j'obtiens cette erreur et l'importation échoue pour une table entière.La base de données PostgreSQL en mouvement échoue sur les caractères non-ascii avec 'valeur trop longue'

psql: /home/me/myDatabase.tar: 660266: ERREUR: valeur trop long pour caractère de type variable (100) CONTEXTE: COPIER myTable, ligne 591, colonne MaColonne: « Un ancien membre de l'Etat Departmentâs âFuture du projet Iraqâ et maintenant à l'Atlantique ... Cou »

les chapeau a sont ces ennuyeux bouclés guillemets simples et doubles. Il me semble qu'ils s'intègrent dans la colonne au début, mais quelque part dans le processus d'exportation/importation, ils se développent, et ne tiennent plus dans la colonne de variation de caractères (100).

Je suis en fait déplacer une base de données en direct sur un serveur j'ai peu la permission pour, donc une seule solution sql serait génial. Est-il possible de faire quelque chose comme

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

EDIT: habe obtenu. J'ai changé

createdb -h myServer -U myUser -T template0 myDatabaseCopy 

à

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

et qui a fait l'affaire.

Répondre

8

Il semble que le problème soit dû au codage de la base de données. Par exemple, la base de données source est codée dans « UTF-8 » et la destination est en caractère plus restreint comme mis « SQL_ASCII. »

Vérifiez les codages des deux bases de données (\l de psql utilitaire aide). S'ils diffèrent, recréez la base de données de destination avec l'option -Exxx.

Questions connexes