PostgreSQL: выгрузить таблицу в CSV через psql
Выгрузить таблицу PostgreSQL в CSV из psql можно двумя командами. Серверный COPY ... TO пишет файл на диск машины, где крутится Postgres. Клиентский \copy пишет файл туда, откуда вы запустили psql. Ниже — оба варианта, тем же разделителем, которым я пользовался.
COPY — файл на сервере
COPY (SELECT * FROM tablename) TO '/tmp/test.csv' WITH CSV DELIMITER ';' HEADER;
Так я и делал. COPY ... TO файл — это SQL. Файл появляется на сервере PostgreSQL, путь должен быть доступен пользователю, под которым запущен процесс postgres. Обычно нужны права суперпользователя. Домашний каталог на ноутбуке сюда не подойдёт.
\copy — файл у себя
\copy (SELECT * FROM tablename) TO 'test.csv' WITH CSV DELIMITER ';' HEADER
\copy — команда psql. Файл создаётся на клиенте. Для выгрузки на свой компьютер это обычный путь: не нужно открывать каталоги серверу и не нужно быть суперпользователем.
Что ещё помнить
HEADERдобавляет строку с именами колонок.DELIMITER ';'удобнее для Excel в русской локали, чем запятая.- Большую выборку лучше ограничивать в подзапросе.
- Если в CSV кракозябры, задайте
ENCODING 'UTF8'.
Смежные заметки: зависшие запросы, хаб PostgreSQL. Про выгрузки на десятки миллионов строк — в разборе 142 млн объявлений.




