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

PostgreSQL COPY命令中动态生成的表名

发布时间:2020-12-13 16:33:51 所属栏目:百科 来源:网络整理
导读:这个PostgreSQL COPY命令有效: copy tablename from E'c:abca.txt'; 但我希望动态生成tablename.我怎样才能做到这一点? 您需要构建一个字符串,在动态表名称中连接,然后使用execute.请注意,您要逃避’by”.这还包括用于保存文件的动态名称.您需要将save
这个PostgreSQL COPY命令有效:
copy tablename from E'c:abca.txt';

但我希望动态生成tablename.我怎样才能做到这一点?

您需要构建一个字符串,在动态表名称中连接,然后使用execute.请注意,您要逃避’by”.这还包括用于保存文件的动态名称.您需要将savedir替换为您使用的实际目录.
CREATE OR REPLACE FUNCTION dynamicCopy(tablename text,outname text) RETURNS VOID AS $$

DECLARE STATEMENT TEXT;

BEGIN

  STATEMENT := 'COPY (select * from ' || quote_ident(tablename) || ') to ''savedir' || outname ||'.txt''';

  EXECUTE STATEMENT;

END;

$$LANGUAGE 'plpgsql';

编辑:

自从我第一次写这篇文章以来,我发现了格式函数,我认为通常比使用串联运算符||生成的SQL更容易阅读而且更灵活.

CREATE OR REPLACE FUNCTION dynamicCopy(tablename text,outname text) RETURNS VOID AS 
$BODY$
BEGIN
  EXECUTE FORMAT('COPY (SELECT * FROM %s) TO ''savedir%s.csv''',tablename,outname);
END
$BODY$
LANGUAGE plpgsql;

有关完整讨论,请参阅官方文档:https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

(编辑:李大同)

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

    推荐文章
      热点阅读