Перемещение базы данных PostgreSQL завершается неудачно для символов, отличных от ascii, со значением «long long» - PullRequest
5 голосов
/ 03 декабря 2009
# 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

Затем я получаю эту ошибку, и импорт завершается неудачей для всей таблицы.

psql: /home/me/myDatabase.tar: 660266: ОШИБКА: значение слишком длинное для изменения типа символа (100) КОНТЕКСТ: COPY myTable, строка 591, колонка myColumn: «Бывший участник проекта Госдепартамента« Будущее Ирака », а теперь и в Атлантическом союзе…»

Эти шляпы - это раздражающие фигурные одинарные и двойные кавычки. Мне кажется, что они сначала помещаются в столбец, но где-то в процессе экспорта / импорта они расширяются, а затем больше не помещаются в столбец с изменяющимся символом (100).

На самом деле я перемещаю действующую базу данных на сервер, для которого у меня мало прав, поэтому было бы неплохо решение только для sql. Есть ли способ сделать что-то вроде

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

EDIT: Хабе понял. Я изменил

createdb -h myServer -U myUser -T template0 myDatabaseCopy

до

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

и это помогло.

1 Ответ

9 голосов
/ 04 декабря 2009

Кажется, что проблема вызвана кодировкой базы данных. Например, исходная база данных кодируется в «UTF-8», а пункт назначения находится в более ограниченном наборе символов, например «SQL_ASCII».

Проверьте кодировки обеих баз данных (\l из psql утилиты помогает). Если они различаются, заново создайте базу данных назначения с параметром -Exxx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...