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
总结以上是内存溢出为你收集整理的PostgreSQL COPY命令中动态生成的表名全部内容,希望文章能够帮你解决PostgreSQL COPY命令中动态生成的表名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)