2012-12-07 194 views
2

我需要上传一个csv文件到postgresql数据库表。 像postgresql导入csv文件

A   B    C  D    E  F 

16777216 16777471  AU  AUSTRALIA  OC  OCEANIA 
16777472 16778239  CN  CHINA   AS  ASIA 
16778240 16779263  AU  AUSTRALIA  OC  OCEANIA 
16779264 16781311  CN  CHINA   AS  ASIA 

和表中的CSV文件

CREATE TABLE ipligence 
(
    ip_from numeric(11,0) NOT NULL DEFAULT 0, 
    ip_to numeric(11,0) NOT NULL DEFAULT 0, 
    country_code character varying(10)[] NOT NULL, 
    country_name character varying(225)[] NOT NULL, 
    continent_code character varying(10)[] NOT NULL, 
    continent_name character varying(255)[] NOT NULL, 
    CONSTRAINT ipligence_pkey PRIMARY KEY (ip_to) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE ipligence 

,我使用pgsql的复制命令,

copy ipligence 
from '/home/pgsql/ipligence-lite.csv' 
delimiter as ',' 
csv quote as '"'; 

,但它显示

ERROR: array value must start with "{" or dimension information 
    CONTEXT: COPY ipligence, line 1, column country_code: "AU" 

怎么能我成功输入csv f回到postgresql数据库。谢谢!

+1

你为什么试图在你的表中使用varchar数组作为国家和洲的列? –

回答

3

您的表格创建不正确。例如,此列声明:

country_code character varying(10)[] NOT NULL, 

正在创建varchar(10)的数组。你只需要一个。在这些列上删除[]

此外,您发布的示例数据实际上并不是以逗号分隔的,但我假定实际的数据文件是。