CSV使用存储过程postgresql

时间:2014-02-17 11:31:17

标签: 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

带参数路径。

创建函数时,它在路径附近出现语法错误。

请帮帮我。

1 个答案:

答案 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字符串。