2017-11-22 2 views
2

csvデータをテーブルにインポートする再帰的プロセスを作成しています。私は私のpgsql関数でhttpリクエストに挿入する必要がある変数を動的に挿入することはできません。postgresql pgsql動的Webリンク

実行形式と動的SQLで%Lを使用して変数 'insert_var'を挿入しようとしています。関数が渡すリンクを見ると、その列に格納されている実際の変数の代わりに 'http://...variable=r1.insert_var ....'と表示されます。私は何を間違えたのですか?

CREATE OR REPLACE FUNCTION recursive_data_import() 
    RETURNS VOID AS $$ 

DECLARE 

insert_var text; 

cur SCROLL CURSOR FOR 
select * from symbols order by insert_var; 
r1 RECORD; 
BEGIN OPEN cur ; 

LOOP 

FETCH cur INTO r1; 
EXIT WHEN NOT FOUND; 

DROP TABLE IF EXISTS temp_table; 

CREATE TABLE temp_table 
(
    var1 numeric, 
    var2 numeric, 
); 


EXECUTE format('COPY temp_table (var1, var2) 
FROM PROGRAM 'wget -q -O - "http://website/Data?variable=%L&Type=0"' WITH (CSV), r1.insert_var); 

ALTER TABLE temp_table 
    ADD COLUMN var3 varchar(10); 
UPDATE temp_table 
     set var3 = r1.insert_var; 

INSERT INTO final_table 
(
SELECT 
    var1, 
    var2, 
    insert_var 
    FROM temp_table 
); 

END LOOP; 

CLOSE cur; 

END; $$ 

LANGUAGE plpgsql; 

答えて

0

はライン

EXECUTE format('COPY temp_table (var1, var2) 
FROM PROGRAM 'wget -q -O - "http://website/Data?variable=%L&Type=0"' WITH (CSV), r1.insert_var); 

に厄介アポストロフィのように見えますが、カスタム文字列の区切り文字を使用することができます。

EXECUTE format($x$COPY temp_table (var1, var2) 
FROM PROGRAM 'wget -q -O - "http://website/Data?variable=%L&Type=0"' WITH (CSV)$x$, r1.insert_var); 
+0

これは、私のリンクの変数が「insert_var」ではなく「insert_var」であることを除いて得られるという点で機能しました。一重引用符を削除する方法はありますか? – user86605

+0

私はそれを理解しました。 EXECUTE形式($ x $ COPY temp_table(var1、var2) FROM PROGRAM 'wget -q -O - "http:// website/Data?変数=%I&Type = 0"' WITH(FORMAT CSV)$ x $、 r1.insert_var); ありがとうございました! – user86605

0

が、私はパベルの助けに基づいて、それを考え出しました!

EXECUTE format($x$COPY temp_table (var1, var2) 
FROM PROGRAM 'wget -q -O - "http://website/Data?variable=%I&Type=0"' WITH (FORMAT CSV)$x$, r1.insert_var); 

Worked。ありがとうございました!

関連する問題