Как выгрузить данные из 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 на локальной машине — это безопаснее и удобнее.
