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

Quindi si verifica questo errore e l'importazione non riesce per un'intera tabella.Lo spostamento del database PostgreSQL ha esito negativo su caratteri non ascii con 'valore troppo lungo'

psql: /home/me/myDatabase.tar: 660.266: ERRORE: valore troppo lungo per tipo character varying (100) CONTESTO: COPIARE myTable, linea 591, colonna MyColumn: "L'ex Stato Departmentâs Afuture del progetto Iraqâ e ora all'Atlantico Cou ... "

Questi cappelli sono quelle fastidiose virgolette singole e doppie. In un primo momento mi sembra che si inseriscano nella colonna, ma da qualche parte nel processo di esportazione/importazione si espandono, e quindi non si adattano più alla colonna di variazione del carattere (100).

In realtà sto spostando un database attivo su un server per il quale ho scarse autorizzazioni, quindi una soluzione solo sql sarebbe ottima. C'è un modo per fare qualcosa di simile

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

EDIT: habe ottenuto. Ho cambiato

createdb -h myServer -U myUser -T template0 myDatabaseCopy 

a

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

e che ha fatto il trucco.

risposta

8

Sembra che il problema sia causato dalla codifica del database. Per esempio, database di origine è codificato in “UTF-8” e la destinazione è di carattere più ristretto incastonato come “SQL_ASCII.”

Verificare le codifiche di entrambi i database (\l di psql utility aiuta). Se si differenziano, ricreare il database di destinazione con l'opzione -Exxx.

Problemi correlati