postgresql pgsql动态网页链接

时间:2017-11-22 23:36:15

标签: postgresql plpgsql

我正在创建一个递归过程,将csv数据导入表中。我似乎无法使用我的pgsql函数动态插入我需要插入到我的http请求中的变量。

我正在尝试插入变量' insert_var'使用带有执行格式的%L和动态sql。当我看到该函数传递的链接时,会说' 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;

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

的工作。谢谢!