这个PostgreSQL COPY命令有效:
copy tablename from E'c:\\abc\\a.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。