Как выгрузить данные из PostgreSQL в формат CSV с помощью команды copy в терминале psql?

Команда `copy` в терминале psql — это клиентская команда для выгрузки данных из PostgreSQL в файл на локальной машине. В отличие от серверной команды `COPY`, она не требует прав суперпользователя и работает через клиентское соединение, что делает её удобной для повседневного использования.

## Базовый синтаксис

Общий формат команды выглядит так:

copy TO » WITH (FORMAT CSV, HEADER TRUE, DELIMITER ‘,’);

## Пример одной строки для выгрузки в CSV

Предположим, у вас есть таблица `employees` с колонками `id`, `name`, `department`, `salary`. Чтобы выгрузить все данные в файл `/tmp/employees.csv` с заголовком и разделителем-запятой, используйте следующую команду прямо в терминале psql:

sql
copy employees TO ‘/tmp/employees.csv’ WITH (FORMAT CSV, HEADER TRUE, DELIMITER ‘,’);

Эта одна строка сделает всё необходимое: создаст файл, добавит строку заголовков (названия колонок) и запишет все строки таблицы в формате CSV.

## Выгрузка результата произвольного SQL-запроса

Если нужно выгрузить не всю таблицу, а только часть данных, оберните запрос в скобки:

sql
copy (SELECT id, name, salary FROM employees WHERE department = ‘IT’) TO ‘/tmp/it_employees.csv’ WITH (FORMAT CSV, HEADER TRUE, DELIMITER ‘,’);

## Ключевые параметры команды

— **FORMAT CSV** — указывает формат выходного файла.
— **HEADER TRUE** — добавляет строку с именами колонок в начало файла.
— **DELIMITER ‘,’** — задаёт символ-разделитель (по умолчанию для CSV это запятая).
— **ENCODING ‘UTF8’** — можно явно указать кодировку, чтобы избежать проблем с кириллицей.
— **NULL ‘NULL’** — определяет, как будут представлены значения NULL в файле.

## Пример с кодировкой (для кириллицы)

sql
copy employees TO ‘/tmp/employees.csv’ WITH (FORMAT CSV, HEADER TRUE, DELIMITER ‘,’, ENCODING ‘UTF8’);

## Важные отличия copy от COPY

| Параметр | copy | COPY |
|—|—|—|
| Выполняется на | клиенте | сервере |
| Права | обычный пользователь | суперпользователь |
| Путь к файлу | локальная машина | сервер БД |

Используйте `copy` всегда, когда работаете с psql на локальной машине — это безопаснее и удобнее.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.