postgresqlcommand-linedynamic-sqlpsqlvariable-substitution

Variable substitution in psql \copy


is possible in PSQL console export file with current date on the end of the file name? The name of the exported file should be like this table_20140710.csv is it possible to do this dynamically? - the format of the date can be different than the above it isn't so much important.

This is example what i mean:

\set curdate current_date
\copy (SELECT * FROM table) To 'C:/users/user/desktop/table_ ' || :curdate  || '.csv' WITH DELIMITER AS ';' CSV HEADER

Solution

  • Dynamically build the \copy command and store it in a file. Then execute it with \i

    First set tuples only output

    \t
    

    Set the output to a file

    \o 'C:/users/user/desktop/copy_command.txt'
    

    Build the \copy command

    select format(
        $$\copy (select * from the_table) To 'C:/users/user/desktop/table_%s.csv' WITH DELIMITER AS ';' CSV HEADER$$
        , current_date
    );
    

    Restore the output to stdout

    \o
    

    Execute the generated command from the file

    \i 'C:/users/user/desktop/copy_command.txt'