首页 > 解决方案 > 将路径作为参数传递给函数

问题描述

我有一个函数,我将 apath作为参数传递给文件。在函数中,我想要COPY位于path

CREATE OR REPLACE FUNCTION load(path varchar)
    RETURNS void
    LANGUAGE plpgsql
  AS
$$
BEGIN
    COPY foo FROM path
    WITH DELIMITER ';' 
    CSV HEADER;

    ...

end;
$$

这给出了一个Syntax Error,指向path。如果我对pathto 进行硬编码C:\Users....,它可以工作。这是为什么?

标签: databasepostgresqlplpgsql

解决方案


copy不适用于变量。塑造并执行动态 SQL。这是一个插图-您的示例已修改。为了清楚起见,我使用美元报价

CREATE OR REPLACE FUNCTION load(path text) RETURNS void LANGUAGE plpgsql AS
$$
begin
 execute replace(
 $dynsql$
    COPY foo FROM '__PATH__'
    WITH DELIMITER ';' 
    CSV HEADER;
 $dynsql$,
 '__PATH__', path);

    ...

end;
$$

推荐阅读