2015-06-13 22 views
0

我通過postgresql從.txt文件導入數據到我的數據庫。 問題是,一些電影的某些列是空的。例如,當通過COPY導入時,電影「abcd」沒有評級,postgresql會拋出一個錯誤「此列中沒有數據」。我怎樣才能在我的CREATE TABLE訂單中發現這個錯誤。我試過用「NULL」,但它也不起作用。DDL(數據定義語言)中的SQL NULL NULL

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 「 

編輯:這是在線路3060

tt0081590Sällskapsresan埃勒芬蘭人DET svenskt kaffe的Pågrisfesten 1980 7.3 4477 107分鐘。拉塞謾 伯格|彼得·哈爾德拉塞謾 伯格|洛蒂·埃赫布蘭特|喬恩·什科門喜劇

**編輯2:我覺得這是問題「一」的PostgreSQL不能識別這封信**

+2

而且正是** **是上線3060? – wildplasser

+0

這樣的: tt0081590 \tSällskapsresan埃勒芬蘭人DET svenskt kaffe的Pågrisfesten \t 1980年\t 7.3 107分鐘。 \t Lasseà berg | Peter Hald \t Lasseà berg | Lottie Ejebrant | Jon Skolmen \t喜劇 – Blnpwr

+0

而細條應該是製表符? – wildplasser

回答

0

在默認的拷貝格式NULL表示爲\N爲可看出:

copy (select null) to stdout; 

結果:

\N 

但是,如果您正在COPY'ing從一個未被Postgres複製到該文件的文件中,沒有理由使用帶反斜槓轉義序列的postgres格式。

一般來說,它是用於表格樣式數據的CSV格式,並且需要在明確啓用作爲一個選項進行復制,如:

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

NULL可以從空字符串來區分如果需要,可以使用FORCE_QUOTEFORCE_NOT_NULL選項。

+0

它不能遺憾地工作:( – Blnpwr

0

這是線3060:

tt0081590Sällskapsresan埃勒芬蘭人DET svenskt kaffe的Pågrisfesten 1980 7.3 4477 107分鐘。拉塞謾 伯格|彼得·哈爾德拉塞謾 伯格|洛蒂·埃赫布蘭特|喬恩·什科門喜劇