根据PostgreSQL的文档,可以直接从查询中将数据复制到csv文件,而无需使用中间表。我很好奇如何做到这一点。
CREATE OR REPLACE FUNCTION m_tbl(my_var integer)
RETURNS void AS
$BODY$
DECLARE
BEGIN
COPY (
select my_var
)
TO 'c:/temp/out.csv';
END;
$$ LANGUAGE plpgsql;
我收到错误:没有这样的专栏' my_var'。
答案 0 :(得分:8)
是的,任何查询都可以COPY
,无论是否引用表格。
但是,COPY
是一个非可计划的语句,一个实用程序语句。它不支持查询参数 - 查询参数是PL / PgSQL如何实现将变量插入语句。
所以你不能在COPY
使用PL / PgSQL变量。
您必须使用EXECUTE
的动态SQL。有关示例,请参阅Pl / PgSQL文档。这里有很多关于Stack Overflow和https://dba.stackexchange.com/的例子。
类似的东西:
EXECUTE format('
COPY (
select %L
)
TO ''c:/temp/out.csv'';
', my_var);
如果您希望文件路径是动态的,那么同样适用 - 您可以使用:
EXECUTE format('
COPY (
select %L
)
TO %L;
', my_var, 'file_name.csv');
它也适用于动态列名称,但您可以使用%I
(对于标识符,例如"my_name"
)而不是%L
来表示{{1} }}。有关'my_value'
和%I
的详细信息,请参阅%L
的文档。