【发布时间】:2015-08-24 17:55:50
【问题描述】:
我正在尝试将此语句创建为函数:
\copy aux("nombre") TO '/home/david/lugares.csv' delimiters ';';
所以我做下一个:
CREATE OR REPLACE FUNCTION crearcsv()
RETURNS void AS
$BODY$
DECLARE STATEMENT TEXT;
BEGIN
RAISE NOTICE 'CREAR CSV';
STATEMENT:= '\copy aux ("nombre") TO ''/home/david/lugares.csv'' delimiters '';'';';
RAISE NOTICE '%',STATEMENT;
EXECUTE STATEMENT;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
但是当我调用该函数时,我得到了下一个:
注意:\copy aux ("nombre") TO '/home/david/lugares.csv' 分隔符 ';'; 错误:“\”处或附近的语法错误
第 1 行:\copy aux ("nombre") TO '/home/david/lugares.csv' 分隔符... ^
查询:\copy aux ("nombre") TO '/home/david/lugares.csv' 分隔符 ';';
上下文:PL/pgSQL 函数 crearcsv() 第 7 行 EXECUTE 语句**
此语句在 PSQL 控制台中运行良好
有什么帮助吗?
【问题讨论】:
-
那是因为
\copy是一个psql command,它或多或少地做了sql command copy does 的作用——最重要的区别是\copy使用运行psql 的计算机的文件系统上的文件,并且copy使用服务器文件系统上的文件。因此,它们高度相似但不完全相同,您不能在函数中使用 \copy,因为它不是 sql 命令。 -
\copy是一个psql命令,只能在psql中执行。它不是一般的 SQL 语句。 -
那么,我该怎么做这个功能呢?
-
@user3733164 你不能。无法通过 pl/pgsql 函数在客户端读取或写入文件