2017-09-13 90 views
1

我试图运行一个查询,它执行数组中每个元素的foreach,然后将其复制到具有自定义命名文件的目录中。这是我目前拥有的代码:Postgres Dynamic COPY Statement

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$ 

然而,这遇到错误在副本statment在to y声明。有没有其他方法可以做到这一点?

+0

'EXECUTE格式(...)'。搜索“postgres动态sql副本”。 –

回答

1

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$