Наборы результатов, сгенерированные из CTE
, не могут быть доступны в другом запросе. CTE создает своего рода «временную таблицу», которая существует только в текущем запросе. При этом поместите свой CTE в оператор COPY
, он должен работать, например,
COPY (
WITH mer9 AS (
SELECT *, substring(seq_window_mut_9mers, split9.start, 9)
FROM split9),
mer23 AS (
SELECT *, substring(seq_window_mut_23mers, split23.start, 23)
FROM split23),
dataset AS (
SELECT * FROM table
INNER JOIN mer9 ON mer9.seq_window_mut_9mers = table.seq_window_mut_9mers
INNER JOIN mer23 ON mer23.seq_window_mut_23mers = table.seq_window_mut_23mers
)
) TO '/tmp/filename.csv' (format CSV);
Редактировать . Как указано @ a_horse_with_no_name :
Имейте в виду, что эта команда создаст файл на сервере. Если вы хотите sh создать файл с выводом на клиенте, рассмотрите возможность использования STDOUT
в вашей команде COPY
, например, psql
:
$ psql -d yourdb -h yourdbhost -U your_user -c "COPY (WITH..) TO STDOUT" > file.csv
Смотрите также это answer
.