2012-04-11 134 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 ',' ' || ';' ; 

應該是這樣的:

​​