我正在将一些客户端内容迁移到服务器中,并希望将其放入函数中。
我需要将查询结果导入CSV文件。但是,我想将结果文件的文件名/位置作为函数的参数传递。
所以,这是我想要做的一个简单的例子:
CREATE FUNCTION send_email_results(filename1 varchar) RETURNS void AS $$
DECLARE
BEGIN
COPY(SELECT * FROM mytable) TO filename1 WITH CSV;
END;
$$ LANGUAGE plpgsql;
Postgres正在抱怨这一点,因为它正在将filename1参数翻译为' $ 1',并且它不知道该怎么做。
如果需要,我可以对路径进行硬编码,但是能够将其作为参数传递肯定会很方便。
任何人都有线索吗?
答案 0 :(得分:3)
我刚刚参与其中。事实证明,当使用复制命令时,你不能使用参数化的参数(至少在python的情况下是存储的proc语言)。因此,您必须构建不带参数的命令,例如:
CREATE FUNCTION send_email_results(filename1 varchar) RETURNS void AS $$
DECLARE
BEGIN
execute 'copy (select * frommytable) to ' || filename1 || ' with csv;';
END;
$$ LANGUAGE plpgsql;
您可能必须使用引用功能才能使其更具可读性。我不知道,我不会将plpgsql用作postgres函数语言,因此语法可能有误。
execute 'copy (select * frommytable) to ' || quote_literal(filename1) || ' with csv;'