psql COPY: сохранить результат запроса в CSV с заголовком
Для CSV результата произвольного SELECT используйте psql \copy с запросом в скобках. Команда выполняется на клиенте, поэтому путь к файлу доступен локальному пользователю, а не серверу PostgreSQL.
Рабочий пример
psql \"$DATABASE_URL\" -c \"\\\\copy (SELECT id, created_at FROM orders WHERE created_at >= DATE '2026-10-01') TO 'orders.csv' WITH (FORMAT csv, HEADER true)\"\copy читает и пишет файлы на клиенте, в отличие от SQL COPY, который работает на сервере и требует серверных прав на путь. HEADER добавляет первую строку с именами столбцов.
Частый вопрос
Как экспортировать данные в stdout?
Укажите TO STDOUT в \copy; вывод можно перенаправить в файл или передать в другой процесс.