I think you cannot (easily) do that (at least on your PostgreSQL version, see Daniel's answeranswer). What you definitely can, however, is changing your approach, and do a UNION ALL
from all those tables in the query part of your COPY
. This means there is no looping, but you have to construct your query from the collected table names.
The result would look like
COPY (SELECT * FROM table1
UNION ALL
SELECT * FROM table2
...)
TO tmp/result.txt;
Notes:
- there is no such thing as a
psql
function.psql
is a client to PostgreSQL. It has built in commands (basically everything starting with\
), however. - it is not so clear what you mean by 'archive logs'. If it is the write-ahead log (WAL), then with the above approach you don't have to worry about it. Otherwise, you can use unlogged tables.
- if the tables are big, there is a chance your system will write (a lot of) temp files. This might make the execution not so fast.