2017-09-13 3 views
1

J'essaie d'exécuter une requête qui exécute un foreach de chaque élément d'un tableau, puis le copie dans un répertoire avec un fichier nommé personnalisé. Voici le code que j'ai actuellement:Instruction COPIE dynamique Postgres

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$ 

Cependant, cette rencontre une erreur dans la statment copie à la déclaration to y. Existe-t-il une autre façon de faire cela?

+0

'EXECUTE Format (...)'. Recherche de "postgres dynamic sql copy". –

Répondre

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$