语法错误在或附近“(”COPY FROM WITH(FORMAT csv,DELIMITER E'\ t',QUOTE'*',HEADER false,ENCODING'UTF8')

时间:2013-12-12 13:48:02

标签: postgresql

我正在从txt文件导入数据 这是表

CREATE TABLE test.geonames_load(geonameid INTEGER PRIMARY KEY,
  name VARCHAR(200),
  asciiname VARCHAR(200),
  alternatenames VARCHAR,
  latitude FLOAT8,
  longitude FLOAT8,
  feature_class char(1),
  feature_code VARCHAR(10),
  country_code VARCHAR(2), 
  cc2 VARCHAR(60),
  admin1 VARCHAR(20),
  admin2 VARCHAR(80),
  admin3 VARCHAR(20),
  admin4 VARCHAR(20),
  population INTEGER,
  elevation INTEGER,
  dem INTEGER,
  timezone VARCHAR(40),
  modification VARCHAR(18)
);

我尝试从txt文件复制后

COPY test.geonames_load FROM 'C:Program Files/PostgreSQL/8.4/data/US/US.txt' WITH (
  FORMAT csv,
  DELIMITER E'\t',
  QUOTE '*',
  HEADER false,
  ENCODING 'UTF8'
);

但它显示错误

ERROR: syntax error at or near "("
LINE 1: ... FROM 'C:Program Files/PostgreSQL/8.4/data/US/US.txt' WITH (
                                                                      ^
********** Error **********

ERROR: syntax error at or near "("
SQL State: 42601
Character: 83

2 个答案:

答案 0 :(得分:3)

版本9.0中COPY的语法相对于8.4

发生了很大变化

假设您使用的是版本8.4,基于此.../PostgreSQL/8.4/...路径, 适用的语法在此处记录:

http://www.postgresql.org/docs/8.4/static/sql-copy.html

并且它不允许在9.0中出现的WITH关键字后出现任何括号,也不允许出现在9.1中的ENCODING选项

看起来您需要使语句适应您的PostgreSQL的确切版本。

答案 1 :(得分:0)

SQL错误[42601]:错误:“(”位置或附近的语法错误:51

对我来说,原因是由于缺少列标题,例如没有中间名标题:

ID,名字,姓氏

使用标头更正CSV文件,并从列标头中删除保留的字符。