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

Ardından bu hatayı alıyorum ve tüm tablo için içe aktarma başarısız oluyor.PostgreSQL veritabanını taşıma, ascii olmayan karakterler üzerinde 'value too long' değeriyle başarısız oluyor

psql'in: /home/me/myDatabase.tar: 660.266: HATA: değişen tipi karakter için çok uzun bir değer (100) İÇERİK: "State Departmentâs âFuture eski bir üyesi: MyTable, hat 591, sütun Sütunum KOPYALAMA Irak'ın projesinin ve şimdi Atlantik Kupasında ... "

Bu şapka-a'nın can sıkıcı tek ve çift tırnak işaretleri. Bana ilk başta sütunlara uyuyor gibi görünüyorlar, ama ihracat/ithalat işleminde bir yerlerde genişliyorlar ve sonra artık karakter (100) sütununa sığmıyorlar.

Aslında canlı bir veritabanını bir sunucuya taşıyorum. Çok az iznim var, bu yüzden bir sql çözümü sadece harika olacaktır.

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

DÜZENLEME gibi bir şey yapmanın bir yolu var mı: habe aldım. Ben

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

için

createdb -h myServer -U myUser -T template0 myDatabaseCopy 

değişti ve bu numarayı yaptı.

cevap

8

Sorun, veritabanı kodlaması nedeniyle ortaya çıkıyor. Örneğin , kaynak veritabanı gibi set daha kısıtlı karakter olan “UTF-8” ve hedefte kodlanan “SQL_ASCII.”

hem veritabanlarının kodlamaları kontrol edin (\lpsql faydası olur). Farklılarsa, hedef veritabanını -Exxx seçeneği ile yeniden oluşturun.

İlgili konular