0

请问,谁能帮我解决这个问题?

我想在 Postgres 数据库中使用分隔符“|”的 CSV 文件中的数据创建一个表,在尝试使用命令 COPY(或 Import)时出现此错误:

ERROR:  extra data after last expected column
CONTEXT:  COPY twitter, line 2: ""Sono da Via Martignacco 
http://t.co/NUC6MP0z|"<a href=""http://foursquare.com"" rel=""nofollow"">f..."

CSV 的前 2 行:

txt|"source"|"ulang"|"coords"|"tweettime_wtz"|"country"|"id"|"userid"|"in_reply_user_id"|"in_reply_status_id"|"uname"|"ucreationdate"|"utimezone"|"followers_count"|"friends_count"|"x_coords"|"y_coords"
Sono da Via Martignacco http://t.co/NUC6MP0z|"<a href=""http://foursquare.com"" rel=""nofollow"">foursquare</a>"|"it"|"0101000020E6100000191CA9E7726F2A4026C1E1269F094740"|"2012-05-13 10:00:45+02"|112|201582743333777411|35445264|""|""|"toffo93"|"2009-04-26 11:00:03"|"Rome"|1044|198|13.21767353|46.07516943

对于这些数据,我在 Postgres 中创建了一个表“Twitter”

CREATE TABLE public.twitter
(
  txt character varying(255),
  source character varying(255),
  ulang character varying(255),
  coords geometry(Point,4326),
  tweettime_wtz character varying(255),
  country integer,
  userid integer NOT NULL,
  in_reply_user_id character varying(255),
  in_reply_status_id character varying(255),
  uname character varying(255),
  ucreationdate character varying(255),
  utimezone character varying(255),
  followers_count integer,
  friends_count integer,
  x_coords numeric,
  y_coords numeric,
  CONSTRAINT id PRIMARY KEY (userid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.twitter
  OWNER TO postgres;

有什么想法吗,伙计们?

4

2 回答 2

0

我的解决方案:

所以问题出在我的 CSV 文件中:它有不可见的引号符号。我在 Excel 中打开 CSV 时还没有看到它们,我是这样看到的:

txt|"source"|"ulang"|"coords"|"tweettime_wtz"|"country"|"id"|"userid"|"in_reply_user_id"|"in_reply_status_id"|"uname"|"ucreationdate"|"utimezone"|"followers_count"|"friends_count"|"x_coords"|"y_coords"
Sono da Via Martignacco http://t.co/NUC6MP0z|"<a href=""http://foursquare.com"" rel=""nofollow"">foursquare</a>"|"it"|"0101000020E6100000191CA9E7726F2A4026C1E1269F094740"|"2012-05-13 10:00:45+02"|112|201582743333777411|35445264|""|""|"toffo93"|"2009-04-26 11:00:03"|"Rome"|1044|198|13.21767353|46.07516943

但是当我在记事本中打开 CSV 时,我看到的却不同:

"txt"|"source"|"ulang"|"coords"|"tweettime_wtz"|"country"|"id"|"userid"|"in_reply_user_id"|"in_reply_status_id"|"uname"|"ucreationdate"|"utimezone"|"followers_count"|"friends_count"|"x_coords"|"y_coords"
"Sono da Via Martignacco http://t.co/NUC6MP0z"|"<a href=""http://foursquare.com"" rel=""nofollow"">foursquare</a>"|"it"|"0101000020E6100000191CA9E7726F2A4026C1E1269F094740"|"2012-05-13 10:00:45+02"|112|201582743333777411|35445264|""|""|"toffo93"|"2009-04-26 11:00:03"|"Rome"|1044|198|13.21767353|46.07516943
"

所以我应该删除所有引号(在记事本中并将文件保存为 CSV),以便文本变为:

txt|source|ulang|coords|tweettime_wtz|country|id|userid|in_reply_user_id|in_reply_status_id|uname|ucreationdate|utimezone|followers_count|friends_count|x_coords|y_coords
Sono da Via Martignacco http://t.co/NUC6MP0z|<a href=http://foursquare.com rel=nofollow>foursquare</a>|it|0101000020E6100000191CA9E7726F2A4026C1E1269F094740|2012-05-13 10:00:45+02|112|201582743333777411|35445264|||toffo93|2009-04-26 11:00:03|Rome|1044|198|13.21767353|46.07516943

只有在此之后,我才能毫无问题地在 pgAdmin 中使用导入工具!

于 2013-04-11T08:33:02.243 回答
0

目标表包含 16 列,但您的文件包含 17 列。

这似乎id是缺少的领域。

尝试将您的表设置为:

CREATE TABLE public.twitter
(
  txt character varying(255),
  source character varying(255),
  ulang character varying(255),
  coords geometry(Point,4326),
  tweettime_wtz character varying(255),
  country integer,
id character varying,
  userid integer NOT NULL,
  in_reply_user_id character varying(255),
  in_reply_status_id character varying(255),
  uname character varying(255),
  ucreationdate character varying(255),
  utimezone character varying(255),
  followers_count integer,
  friends_count integer,
  x_coords numeric,
  y_coords numeric,
  CONSTRAINT twitter_pk PRIMARY KEY (userid)
)
WITH (
  OIDS=FALSE
);

根据需要更改id字段的数据类型。

于 2013-04-10T15:29:53.977 回答