我想使用存储过程将csv复制到数据库。我的功能如下;
CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS
'COPY gis_portal.temp_excel FROM path WITH DELIMITER'
LANGUAGE sql VOLATILE LEAKPROOF;
查询是
COPY gis_portal.temp_excel FROM path WITH DELIMITER ',' CSV HEADER
带参数路径。
创建函数时,它在路径附近出现语法错误。
请帮帮我。
答案 0 :(得分:1)
'COPY gis_portal.temp_excel FROM path WITH DELIMITER'
^^^^^^^^^^
什么分隔符?如果您使用该关键字,则必须指定一个。
尝试:
CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS $$
COPY gis_portal.temp_excel FROM path WITH DELIMITER ','
$$ LANGUAGE sql;
或任何你想要的分隔符。
此外,在SQL函数中,您不能使用必须使用位置参数的标识符,例如$ 1。但由于COPY
不是plannable语句,因此您无法在其中使用参数。您将不得不使用PL / PgSQL和EXECUTE
将其作为动态SQL运行:
CREATE FUNCTION gis_portal.copycsv(IN path text) RETURNS void AS $$
BEGIN
EXECUTE format('COPY gis_portal.temp_excel FROM %L WITH DELIMITER '',''', path);
END;
$$ LANGUAGE plpgsql;
请注意分隔符周围的双引号,因为它现在是一个SQL字符串。