2016-04-14 8 views
1

У меня есть запрос JDBI, который возвращает много столбцов из нескольких таблиц, которые мне нужно записать в файл CSV. Как я могу это достичь? У меня есть конечная точка REST, которая получает POST из критериев поиска, с помощью которых я создаю запрос для запуска Postgres db. Я использую Dropwizard и JDBI.Преобразование результата запроса в CSV

ответ

2

COPY TO.

COPY (SELECT ...) TO '/path/to/myfile1.csv' FORMAT csv; 

Если вы хотите написать файл, вам нужны привилегии суперпользователя. The manual:

COPY именования файла или команды разрешено только суперпользователям базы данных, поскольку она позволяет читать или писать любой файл, который сервер имеет привилегии доступа.

Или вы можете отправить вывод STDOUT непосредственно без сохранения в файл (возможно без привилегий суперпользователя!).

Чтобы записать файл на свой клиент (может быть отдельно от сервера БД или нет), используйте мета-команду \copy of psql, инкапсулирующую те же функции. Это делает not require superuser privileges:

Это означает, что файл доступа и привилегии являются те локального пользователя, а не на сервере, а также каких-либо привилегий SQL суперпользователя не требуется.

Детали:

+0

В качестве альтернативы, вы можете использовать CSVWriter (OpenCsv), чтобы написать это. При этом в следующий раз, когда вам нужно будет отключить решение для вашей базы данных, ваше приложение не будет ломаться (надеюсь) – pandaadb

+0

Я не могу использовать 'COPY' из-за требований привилегированных пользователей. Мы используем SuperCSV, у которого есть 'CsvResultSetWriter'. Но, не уверен, как достичь этого, так как мой фактический результат запроса - это набор столбцов из нескольких таблиц, и у меня нет класса '@ RegisterMapper', и у меня его нет. – Nikki

+0

@Nikki: '\ copy' psql не требует привилегий суперпользователя. Рассмотрим дополнительные сведения. –