2012-04-11 7 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) 
); 

私はfilePathに(ファイルの絶対パス)指定されたテーブルに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

あなたが答えている質問だと思います:

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

は次のようなものでなければなりませんか?回答を受け入れるか、なぜ受け入れられないのかをコメントすることは良い習慣です。 – vyegorov

答えて

3

あなたは引用符を適切に処理せず、誤って有効な構文で正しい結果数の列を持たないステートメントがあります。他にもいくつか問題があります。

この:

​​