Парсинг данных из Postgresql в json файл с помощью java

Требуется вытащить из БД postgresql одну таблицу в файл json с помощью программы на java.

У меня получилось только создать запрос, который выводит данные в нужном мне виде через консоль psql

(select row_to_json(t)  from(select * from cars) as t) 

но в программе на java не выходит, вот что я пытаюсь делать:

String sql = "select row_to_json(t) " +
                 "into outfile C:\\Users\\79885\\IdeaProjects\\untitled6\\json files\\my1_file.json" +
                 "from(select * from cars) as t";
             stmt.executeUpdate(sql);

Вся программа: PS. в данной программе работают другие команды sql (create, input into, etc.)

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;


public class PostgreSQLJDBC {
    public static void main( String args[] ) {
        Connection c = null;
        Statement stmt = null;
        try {
            Class.forName("org.postgresql.Driver");
            c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "postgres");
            System.out.println("Opened database successfully");

            stmt = c.createStatement();
            String sql = "select row_to_json(t) " +
                    "into outfile C:\\Users\\79885\\IdeaProjects\\untitled6\\json files\\my1_file.json" +
                    "from(select * from cars) as t";
                stmt.executeUpdate(sql);

            stmt.close();
            c.close();
        } catch ( Exception e ) {
            System.err.println( e.getClass().getName()+": "+ e.getMessage() );
            System.exit(0);
        }
        System.out.println("Table created successfully");
    }
} 

Получаю ошибку: org.postgresql.util.PSQLException: ОШИБКА: ошибка синтаксиса (примерное положение: "C") Думаю, что неправильно пытаюсь создать/обратиться к файлу, подскажите, как правильно это делается


Ответы (2 шт):

Автор решения: Илья

Теперь нужно скопировать запрос из консоли IDEA и вставить его в консоль Постгресса. И посмотреть, что тот скажет. Может быть путь не существует? Попробуйте попроще путь.

→ Ссылка
Автор решения: Alexander Petrov

Я не спец по Postgres, но откуда вы взяли такой синтаксис?

select ... into ... используется для вставки в таблицу, но не в файл.

И что означает outfile? Во многих примерах sql-запросов этот параметр используется для указания имени файла. То есть вместо outfile должно быть определённое значение, а само это слово не нужно.

COPY - очевидно, вам нужна эта команда. Она позволяет копировать данные в файл.

Но этой командой не получится с сервера записать файла на клиенте.


У вас в коде применяется row_to_json. Если использовать именно это функцию, то запрос должен выглядеть просто:

select row_to_json(*) from cars

И в коде Java стандартным способом в цикле читаем значения и пишем в файл.


Другой вариант. Вернее, варианты. Смотрите https://stackoverflow.com/a/24006432/5045688.

Кратко:

SELECT json_agg(t) FROM t
→ Ссылка