使用存储过程将CSV转换为postgresql

使用存储过程将CSV转换为postgresql,postgresql,postgresql-9.1,Postgresql,Postgresql 9.1,我想使用存储过程将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

我想使用存储过程将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
具有参数路径

在创建函数时,它将错误作为路径附近的语法错误

请帮帮我

'COPY gis_portal.temp_excel FROM path WITH DELIMITER'
                                           ^^^^^^^^^^
什么分隔符?如果使用该关键字,则必须指定一个

尝试:

或者任何你想要的分隔符

此外,在SQL函数中不能使用标识符,必须使用位置参数,如$1。但由于
COPY
不是可规划的语句,因此不能在其中使用参数。您必须使用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字符串。

请始终显示错误的完整、准确文本。出现错误:语法错误位于或接近“路径”SQL状态:42601字符:101@Santhucool啊,对。在SQL函数中,不能使用标识符,必须使用位置参数,如$1。
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;