2015-06-13 2 views
0

Я импортировал данные из файла .txt в мою базу данных через postgresql. Проблема в том, что некоторые столбцы некоторых фильмов пустые. Например, нет рейтинга для фильма «abcd», при импорте через COPY postgresql выдает сообщение об ошибке «нет данных в этом столбце». Как я могу поймать эту ошибку в моем заказе CREATE TABLE. Я попробовал его с помощью «NULL», но он тоже не работает.SQL NULL в DDL (язык определения данных)

CREATE TABLE movies 
(
imdib varchar NOT NULL, 
    name varchar NOT NULL, 
    year integer NULL, 
    rating float NULL , 
    votes integer NULL , 
    runtime varchar NULL , 
    directors varchar NULL , 
    actors varchar NULL , 
    genres varchar NULL 
); 

COPY movies from 'C:\Users\Max\Desktop\imdb_top100t.txt' DELIMITER E'\t' ; 

Сообщение об ошибке:

ERROR: missing data for column „year“ 
CONTEXT: COPY movies, Line 3060: „tt0283003 “ 
********** Error ********** 
ERROR: missing data for column „year“ 
SQL Status:22P04 
Context: COPY movies, Line 3060: „tt0283003 “ 

EDIT: Это находится на линии 3060

tt0081590 Sällskapsresan Eller финны DeT Свенскт Kaffe på grisfesten 1980 7,3 4477 107 мин. Лассе Ã берг | Питер Hald Лассе Ã берг | Лотти Эджебрант | Джон Скемен Comedy

** EDIT 2: Я думаю, что это проблема "Ã" PostgreSQL не может распознать это письмо **

+2

А что именно ** есть ** на линии 3060? – wildplasser

+0

это: tt0081590 \t Sällskapsresan Эллер финны йе Svenskt Каффе på grisfesten \t \t 1980 7,3 \t \t 4477 107 мин. \t Lasse à berg | Peter Hald \t Lasse à berg | Lottie Ejebrant | Jon Skolmen \t Comedy – Blnpwr

+0

А тонкие полосы должны быть символами табуляции? – wildplasser

ответ

0

NULL в формате COPY по умолчанию выражается в \N, как можно увидеть:

copy (select null) to stdout; 

Результат:

\N 

Но если вы КОПИРОВАЛИ ИЗ файла, который не был экспортирован Postgres COPY TO этот файл, нет никакой причины, чтобы он использовал формат postgres с его escape-последовательностями обратной косой черты.

Как правило, это формат CSV, который используется для передачи данных в табличной форме в стиле, и который должен быть включен в явном виде в качестве опции для копирования, как:

COPY tablename FROM 'filename.txt' (DELIMITER E'\t', FORMAT CSV, NULL ''); 

NULL можно отличить от пустых строк если необходимо, используя параметры FORCE_QUOTE и FORCE_NOT_NULL.

+0

Это не сработало к сожалению :( – Blnpwr

0

Это на линии 3060:

tt0081590 Sällskapsresan Эллер финны DeT Свенскт Каффе på grisfesten 1980 7,3 4477 107 мин. Лассе Ã берг | Питер Hald Лассе Ã берг | Лотти Эджебрант | Джон Скемен Comedy

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