В этом случае вам не следует использовать оператор ||
.Это оператор SQL, и COPY
не допускает выражения там.
psql
переменные объединяются по умолчанию.Так что в этом случае оператор ||
бесполезен.
\set out_path /path/to/my/output/dir/
\echo :out_path/file_csv
postgres=# \set out_path /path/to/my/output/dir/
postgres=# \echo :out_path/file_csv
/path/to/my/output/dir//file_csv
Если вы не запускаете этот скрипт под суперпользователем, вы не сможете записать в файловую систему сервера.Это не хорошо делать эти операции под суперпользователем.Поэтому, вероятно, вам следует использовать команды \COPY
, которые связаны с файловой системой на стороне клиента.
Таким образом, ваш скрипт может выглядеть так:
-- does concat too
\set file_path :out_path 'file.csv'
\copy my_table to :file_path csv