Postgres动态COPY声明

时间:2017-09-13 15:40:05

标签: postgresql plpgsql postgresql-9.6

我正在尝试运行一个查询,该查询执行数组中每个元素的foreach,然后将其复制到具有自定义命名文件的目录中。这是我目前的代码:

DO
$do$
declare
    x varchar;
    y varchar;
    arr varchar[] := array['item1','item2'];
begin
    foreach x in array arr
    loop
        y := concat('C:\Outputs\output_' , x , '.csv');
        copy (select * from pdtable where pdtable.area = x) to y With CSV;
    end loop;
end
$do$

但是,这会在to y语句的副本声明中遇到错误。有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

https://www.postgresql.org/docs/current/static/functions-string.html

DO
$do$
declare
    x varchar;
    y varchar;
    arr varchar[] := array['item1','item2'];
begin
    foreach x in array arr
    loop
        y := concat('C:\Outputs\output_' , x , '.csv');
        execute format('copy (select * from pdtable where pdtable.area = %L) to %L With CSV',x,y);
    end loop;
end
$do$