我有一个函数,我将一个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;
$$
给出一个指向path
的Syntax Error
。如果我硬编码path
到C:Users....
,它工作。为什么呢?
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;
$$