2015-06-18 3 views
1

Я импортирую файл .txt, содержащий информацию imdb (например, moviename, movieid, актеры, режиссеры, рейтинг голосов и т. Д.). Я импортировал его с помощью инструкции COPY. Я использую 64-битный бит Ubuntu. Проблема в том, что есть актеры, имеющие разные имена, такие как Йонас Акерлунд. Поэтому PostgreSQL выдает ошибку:Postgresql COPY кодирование, как?

ERROR: missing data for column "actors" CONTEXT: COPY movies, line 3060: "tt0283003 Spun 2002 6.8 30801 101 mins. Jonas Ã" ********** Error **********

ERROR: missing data for column "actors" SQL state: 22P04 Context: COPY movies, line 3060: "tt0283003 Spun 2002 6.8 30801 101 mins. Jonas Ã"

Моя копия заявление выглядит следующим образом:

COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt' (DELIMITER E'\t', FORMAT CSV, NULL ''); 

Я точно не знаю, как использовать оператор сортировки. Не могли бы вы мне помочь, пожалуйста? Как всегда, спасибо.

ответ

2

Сортировка определяет только порядок сортировки строк. Важная вещь при загрузке и сохранении - это кодирование.

По умолчанию Postgres использует вашу команду client_encoding для команд COPY; если он не соответствует кодировке файла, вы столкнетесь с такими проблемами.

Из сообщения видно, что при попытке прочитать «Å» Postgres сначала прочитали «Ã», а затем столкнулись с какой-то ошибкой. Последовательность байтов UTF8 для «Å» равна C3 85. C3 является «Ã» в кодовой странице LATIN1, а 85 не определено *. Поэтому очень вероятно, что файл UTF8, но читается так, как если бы он был LATIN1.

Это должно быть так же просто, как с указанием соответствующей кодировки в команде COPY:

COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt' 
(DELIMITER E'\t', FORMAT CSV, NULL '', ENCODING 'UTF8'); 

* Я считаю Postgres на самом деле отображает эти «пробелы» в LATIN1 в соответствующих кодовых точек Unicode. 85 становится U+0085, a.k.a. «NEXT LINE», что объясняет, почему он рассматривался как терминатор строки CSV.

+0

спасибо, очень много. Я ценю вашу помощь. Человек, что бы я сделал без этого сайта. – Blnpwr

+0

К сожалению, это не сработало :(, я использовал «SHOW SERVER_ENCODING», и он говорит UTF8, но почему он не работает? – Blnpwr

+0

@Blnpwr: 'server_encoding' не имеет значения, это' client_encoding', который используется для интерпретации 'COPY' файлы. Что говорит 'SHOW client_encoding'? –

Смежные вопросы