将路径作为参数传递给函数

Passing a path as parameter to function

我有一个函数,我将 path 作为参数传递给文件。在函数中,我想 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。如果我将 path 硬编码为 C:\Users....,它就可以工作。 这是为什么?

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

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;
$$