Я пытаюсь экспортировать таблицы из моей Postgres базы данных в json файлы, все работает нормально, когда я просто использую select row_to_json(t) from (SELECT * from tableName) t;
, но для таблиц, в которых они имеют более 1,6 миллиона строк, Postgres показывает исключение из-за нехватки памяти.Поэтому лучшее решение, которое я нашел, - это работать с copyManager и копировать результат непосредственно в файл json, используя этот sql оператор COPY (select row_to_json(t) from (SELECT * from tableName) t) to STDOUT ;
, моя проблема в том, что у меня есть некоторые данные с двойными кавычками при использовании нормальный ВЫБОР Я получаю свой файл json правильно и "похожи на \", но при использовании КОПИРОВАНИЯ "похожи на \\" или с этим у меня возникают проблемы с синтаксическим анализом JSON, потому что это больше не действительный json ниже это мой код
FileWriter fileWriter = new FileWriter("C:/" + tableName + ".json");
CopyManager copyManager = new CopyManager(db.getConnection().unwrap(BaseConnection.class));
String sql = "COPY (select row_to_json(t) from (SELECT * from " + tableName
+ ") t) to STDOUT ;";
try {
copyManager.copyOut(sql, fileWriter);
}
catch (Exception e) {
log.error(e);
} finally {
fileWriter.close();
}
ошибка при синтаксическом анализе Internal error:org.json.simple.parser.ParseException error Unexpected character (f) at position 127.
, и если мы посмотрим на эту позицию, мы обнаружили
"street":"street name \\"first test\\""
, и это не действительный json, который я можно проанализировать его или использовать select row_to_json(t) from (SELECT * from tableName) t;
Я получаю это
"street":"street name \"first test\""
, и он отлично работает, так как я могу это исправить, или если есть другие методы для экспорта огромных таблиц в файлы json, спасибо
это пр код, который работает:
PrintWriter printWriter = new PrintWriter(fileWriter);
String sql = "select row_to_json(t) from (SELECT " + columns + " from " + tableName + ") t) ";
try(Connection con = db.getConnection()){
try (PreparedStatement stmt = SQL.prepareStatement(db, con, sql);
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
printWriter.print(rs.getString(1));
}
stmt.close();
}
printWriter.close();
}