Intento crear una función dinámica que exporte identificadores específicos de datos controlados por un for, pero cuando ejecuto la función me muestra el error de que no hay una columna i , me gustaría concatenar la variable i con el nombre del archivo de salida
CREATE OR REPLACE FUNCTION mifuncion() RETURNS void AS $$ BEGIN FOR i IN 1..5 LOOP copy (select nombre,dni,edad from test where id=i) TO 'C:\Users\Usuario\Documents\user'+i+'.csv' WITH CSV HEADER; END LOOP; END; $$ LANGUAGE plpgsql;COPY no admite parámetros de consulta, por lo que no puede usar variables PL/PGSQL con COPY.
Debería usar SQL dinámico con EXECUTE en su lugar. Puede declarar variables para almacenar la declaración de consulta y la ruta del archivo, y luego ejecutarlo así
EXECUTE FORMAT('COPY (%s) TO %L WITH CSV HEADER', your_query, file_path);O
EXECUTE FORMAT('COPY (%s) TO %L WITH CSV HEADER', 'SELECT nombre, dni, edad FROM test WHERE id = ' || i, 'C:\Users\Usuario\Documents\user' || i || '.csv');Podría usar SQL dinámico con EXECUTE en su lugar, así
statement :='COPY (select nombre,dni,edad from test where id=' || i || ') to ''C:\Users\Usuario\Documents\user' || i ||'.csv'''; EXECUTE statement;