2012-04-11 50 views
0

美好的一天!Postgresql中的COPY命令查询

我想咨询关于Postgresql的COPY命令。 我有这个表:

CREATE TABLE pm_monitor_temporary 
(
    date timestamp NOT NULL, 
    targetid varchar(128) NOT NULL, 
    value1 float8 NOT NULL, 
    value2 float8 NOT NULL, 
    value3 float8 NOT NULL, 
    value4 float8 NOT NULL, 
    value5 float8 NOT NULL, 
    value6 float8 NOT NULL, 
    datastatus1 varchar(2) NOT NULL, 
    datastatus2 varchar(2) NOT NULL, 
    datastatus3 varchar(2) NOT NULL, 
    datastatus4 varchar(2) NOT NULL, 
    datastatus5 varchar(2) NOT NULL, 
    datastatus6 varchar(2) NOT NULL, 
    granularity int4 NOT NULL, 
    neid varchar(16) NOT NULL, 
    CONSTRAINT pm_monitor_pkey PRIMARY KEY (date, targetid, granularity, neid) 
); 

我没有创建将CSV内容复制到给定的文件路径(文件的绝对路径)表的功能。似乎是与我的SQL函数的一个问题:

Create Or Replace Function copycsv_pm_monitor_temp(filePath varchar(1025)) 
Returns void As 
$BODY$ 
DECLARE 
    sql varchar(1025); 
BEGIN 
    sql := 'COPY pm_monitor_temporary FROM {' || filePath || 
     '| stdin} using DELIMITERS ',' ' || ';' ; 
    EXECUTE sql; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE; 

这将编译,然而,这将最终导致到错误,当我运行我的Java代码。我错过了什么?

Caused by: org.postgresql.util.PSQLException: ERROR: query "SELECT 'COPY     pm_monitor_temporary FROM {' || $1 || '| stdin} using DELIMITERS ',' ' || ';'" returned  2 columns 
+0

你觉得你问题的答案?接受答案或提供评论为什么他们不能接受是一个好习惯。 – vyegorov 2012-04-14 19:59:26

回答

3

你没有处理你的报价正常,并意外地得到了在有效语法的陈述没有结果列的权数。你也有其他一些问题。

此:

sql := 'COPY pm_monitor_temporary FROM {' || filePath || 
     '| stdin} using DELIMITERS ',' ' || ';' ; 

应该是这样的:

​​