Postgres PL / pgSQL函数结果为file,文件名为参数

时间:2014-05-07 16:02:22

标签: sql postgresql csv copy plpgsql

我正在将一些客户端内容迁移到服务器中,并希望将其放入函数中。

我需要将查询结果导入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',并且它不知道该怎么做。

如果需要,我可以对路径进行硬编码,但是能够将其作为参数传递肯定会很方便。

任何人都有线索吗?

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;'
相关问题