Как сделать резервную копию с Postgresql-DB через JDBC? - PullRequest
6 голосов
/ 28 сентября 2010

В нашем приложении мы реализовали автоматическую миграцию БД, запускаемую из нашего кода.Теперь мы хотим сделать резервную копию существующей БД перед выполнением любой миграции.

Может кто-нибудь объяснить, как сделать полное резервное копирование Postgresql-DB через JDBC из кода Java?

Обновление: через JDBC не работает.

Вот рабочий код на ответ Фрэнк Хейкенс :

    final List<String> baseCmds = new ArrayList<String>();
    baseCmds.add("/usr/bin/pg_dump");
    baseCmds.add("-h");
    baseCmds.add("hostname");
    baseCmds.add("-p");
    baseCmds.add("5432");
    baseCmds.add("-U");
    baseCmds.add("username");
    baseCmds.add("-b");
    baseCmds.add("-v");
    baseCmds.add("-f");
    baseCmds.add("/path/to/backup.sql");
    baseCmds.add("dbName");
    final ProcessBuilder pb = new ProcessBuilder(baseCmds);

    // Set the password
    final Map<String, String> env = pb.environment();
    env.put("PGPASSWORD", "password");

    try {
        final Process process = pb.start();

        final BufferedReader r = new BufferedReader(
                  new InputStreamReader(process.getErrorStream()));
        String line = r.readLine();
        while (line != null) {
            System.err.println(line);
            line = r.readLine();
        }
        r.close();

        final int dcertExitCode = process.waitFor();

     } catch (IOException e) {
        e.printStackTrace();
     } catch (InterruptedException ie) {
        ie.printStackTrace();
     }

Ответы [ 3 ]

6 голосов
/ 28 сентября 2010

Почему бы вам не использовать pg_dump ?

3 голосов
/ 27 января 2011

Библиотека Postgresql JDBC теперь поддерживает массовые операции COPY. Смотри http://jdbc.postgresql.org/documentation/publicapi/index.html?org/postgresql/copy/CopyManager.html

Чтобы создать резервную копию базы данных, вам нужно CopyOut из БД в поток, а затем развернуть процесс для восстановления, используя CopyIn.

0 голосов
/ 28 сентября 2010

Я использую DbUnit для резервного копирования базы данных из моего Java-приложения:

DbUnit имеет возможность экспортировать и импортировать данные вашей базы данных в наборы данных XML и из них. Начиная с версии 2.0, DbUnit также может работать с очень большими наборами данных при использовании в потоковом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...