加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 在动态COPY语句中使用函数变量

发布时间:2020-12-13 16:30:35 所属栏目:百科 来源:网络整理
导读:根据PostgreSQL的文档,可以直接从查询中将数据复制到csv文件,而无需使用中间表.我很好奇如何做到这一点. CREATE OR REPLACE FUNCTION m_tbl(my_var integer) RETURNS void AS$BODY$DECLAREBEGIN COPY ( select my_var ) TO 'c:/temp/out.csv';END;$$LANGUAGE
根据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’.

是的,可以从任何查询中复制,无论它是否引用表.

但是,COPY是一个不可计划的声明,一个实用程序声明.它不支持查询参数 – 查询参数是PL / PgSQL如何实现将变量插入语句.

所以你不能在PLY中使用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用于文字,如’my_value’.有关%I和%L的详细信息,请参阅格式文档.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读