将路径作为参数传递给函数
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;
$$
我有一个函数,我将 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;
$$