2009-12-03 16 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 

Luego aparece este error y la importación falla para una tabla completa.Mover la base de datos PostgreSQL falla en caracteres no ascii con 'valor demasiado largo'

psql: /home/me/myDatabase.tar: 660266: ERROR: valor demasiado largo para carácter de tipo variable (100) CONTEXTO: copia myTable, línea 591, columna MICOLUMNA: "Un miembro anterior del Estado Departmentâs âFuture del proyecto Iraqâ y ahora en el Atlantic Cou ... "

Esos hat-a's son esas molestas comillas simples y dobles. Me parece que encajan en la columna al principio, pero en algún lugar del proceso de exportación/importación se expanden, y luego ya no caben en la columna de variación de caracteres (100).

En realidad estoy moviendo una base de datos en vivo en un servidor para el que tengo poco permiso, por lo que una solución sql única sería genial. ¿Hay una manera de hacer algo como

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

EDIT: habe consiguió. He cambiado

createdb -h myServer -U myUser -T template0 myDatabaseCopy 

a

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

y que hizo el truco.

Respuesta

8

Parece que el problema se debe a la codificación de la base de datos. Por ejemplo, la base de datos fuente se codifica en “UTF-8” y el destino es de carácter más restringido establecido como “SQL_ASCII.”

Compruebe las codificaciones de ambas bases de datos (\l de psql utilidad ayuda). Si difieren, vuelva a crear la base de datos de destino con la opción -Exxx.

Cuestiones relacionadas