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

Sau đó, tôi nhận được lỗi này và quá trình nhập không thành công cho toàn bộ bảng.Di chuyển cơ sở dữ liệu PostgreSQL không thành công trên các ký tự không phải ascii với 'giá trị quá dài'

psql: /home/me/myDatabase.tar: 660266: ERROR: giá trị quá dài cho loại ký tự khác nhau (100) CONTEXT: COPY myTable, dòng 591, cột myColumn: "Một thành viên cũ của Bộ Ngoại giao Hoa Kỳ của dự án Iraq và bây giờ tại Atlantic Cou ... "

Những chiếc mũ đó là những dấu ngoặc kép đơn và đôi khó chịu. Dường như với tôi như chúng vừa vặn trong cột lúc đầu, nhưng ở đâu đó trong quá trình xuất/nhập khẩu chúng mở rộng, và sau đó không còn phù hợp với cột nhân vật khác nhau (100).

Tôi thực sự đang di chuyển cơ sở dữ liệu trực tiếp trên máy chủ mà tôi có ít quyền, vì vậy giải pháp duy nhất của sql sẽ tuyệt vời. Có cách nào để làm điều gì đó như

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

EDIT: habe đã nhận. Tôi đã thay đổi

createdb -h myServer -U myUser -T template0 myDatabaseCopy 

để

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

và đó đã làm các trick.

Trả lời

8

Dường như vấn đề là do mã hóa cơ sở dữ liệu. Ví dụ, cơ sở dữ liệu nguồn được mã hóa trong “UTF-8” và đích là ở nhân vật hạn chế nhiều thiết lập như “SQL_ASCII.”

Kiểm tra mã hóa của cả hai cơ sở dữ liệu (\l của psql tiện ích giúp). Nếu chúng khác nhau, hãy tạo lại cơ sở dữ liệu đích với tùy chọn -Exxx.