2016-04-14 45 views
1

私はCSVファイルに書き込む必要があるいくつかのテーブルから多くのカラムを返すJDBIクエリを持っています。どうすればこれを達成できますか?私はPostgresデータベースに対して起動するためのクエリを作成するために、検索基準のPOSTを受け取るRESTエンドポイントを持っています。私はDropwizardとJDBIを使用しています。クエリ結果をCSVに変換する

答えて

2

COPY TOを使用してください。

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

ファイルに書き込む場合は、スーパーユーザー権限が必要です。それは、サーバがアクセス 権限を持つ任意のファイルを読み書きすることができますので、唯一のデータベースのスーパーユーザ、 に許可されているファイルやコマンドを命名The manual:

COPY

または、出力をファイルに保存せずに直接STDOUTに送信することができます(スーパーユーザー権限なしでも可能です)。

クライアントにファイルを書き込むには(DBサーバーとは別にすることもできます)、同じ機能をカプセル化するメタコマンド\copy of psqlを使用します。これは、not require superuser privileges

これは、ファイルのアクセシビリティと特権がサーバーではなくローカルユーザーのものであり、SQLスーパーユーザー権限が不要であることを意味します。

詳細:

+0

はまた、あなたがこれを書くためにCSVWriter(OpenCsv)を使用することができます。それでは、次にデータベースのソリューションを切り替える必要があるときに、アプリケーションは中断しません。(うまくいけば) – pandaadb

+0

スーパーユーザーの権限要件のために 'COPY'を使用することはできません。 'CsvResultSetWriter'を持つSuperCSVを使用しています。しかし、実際のクエリ結果としてこれを実現する方法がいくつかのテーブルからの列のセットであり、 '@ RegisterMapper'クラスを持つ必要はなく、私は持っていません。 – Nikki

+0

@Nikki:psqlの '\ copy'にはスーパーユーザー権限は必要ありません。追加の詳細を検討してください。 –

関連する問題