CREATE TABLE copy1 (a int, b float); -- COPY TO/FROM not authorized from client. DO LANGUAGE plpgsql $$ BEGIN COPY copy1 TO stdout; END; $$; ERROR: cannot COPY to/from client in PL/pgSQL CONTEXT: PL/pgSQL function inline_code_block line 3 at SQL statement DO LANGUAGE plpgsql $$ BEGIN COPY copy1 FROM stdin; END; $$; ERROR: cannot COPY to/from client in PL/pgSQL CONTEXT: PL/pgSQL function inline_code_block line 3 at SQL statement DO LANGUAGE plpgsql $$ BEGIN EXECUTE 'COPY copy1 TO stdout'; END; $$; ERROR: cannot COPY to/from client in PL/pgSQL CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE DO LANGUAGE plpgsql $$ BEGIN EXECUTE 'COPY copy1 FROM stdin'; END; $$; ERROR: cannot COPY to/from client in PL/pgSQL CONTEXT: PL/pgSQL function inline_code_block line 3 at EXECUTE -- Valid cases -- COPY FROM DO LANGUAGE plpgsql $$ BEGIN COPY copy1 FROM '@abs_srcdir@/data/copy1.data'; END; $$; SELECT * FROM copy1 ORDER BY 1; a | b ---+----- 1 | 1.1 2 | 2.2 3 | 3.3 (3 rows) TRUNCATE copy1; DO LANGUAGE plpgsql $$ BEGIN EXECUTE 'COPY copy1 FROM ''@abs_srcdir@/data/copy1.data'''; END; $$; SELECT * FROM copy1 ORDER BY 1; a | b ---+----- 1 | 1.1 2 | 2.2 3 | 3.3 (3 rows) -- COPY TO -- Copy the data externally once, then process it back to the table. DO LANGUAGE plpgsql $$ BEGIN COPY copy1 TO '@abs_builddir@/results/copy1.data'; END; $$; TRUNCATE copy1; DO LANGUAGE plpgsql $$ BEGIN COPY copy1 FROM '@abs_builddir@/results/copy1.data'; END; $$; DO LANGUAGE plpgsql $$ BEGIN EXECUTE 'COPY copy1 FROM ''@abs_builddir@/results/copy1.data'''; END; $$; SELECT * FROM copy1 ORDER BY 1; a | b ---+----- 1 | 1.1 1 | 1.1 2 | 2.2 2 | 2.2 3 | 3.3 3 | 3.3 (6 rows) DROP TABLE copy1;