pg_dump отдельных таблиц - можно сделать в цикле? - PullRequest
3 голосов
/ 27 августа 2011

Мне было поручено создать файлы pg_dump для БД, в которой более 50 таблиц. Я знаю, как сделать это вручную через командную строку psql, но я считаю, что должен быть более быстрый способ, чем делать каждый вручную. Любые предложения о том, как это программно? Например, может ли Perl-скрипт вызвать pg_dump?

Ответы [ 3 ]

2 голосов
/ 27 августа 2011

Если я правильно понимаю ваш вопрос, то достаточно использовать следующий Bash-скрипт:

#!/bin/bash

for table in `psql -Atc "\dt" | cut -d '|' -f2`   
do   
   pg_dump -Fp -t $table -f $table.dump;
done

Получает список всех таблиц в некоторой базе данных и выполняет pg_dump -t для каждой из них.

Вот эквивалент Perl, если вы предпочитаете:

#!/usr/bin/perl

@tables = qx/psql -Atc "\\dt" | cut -d '|' -f2/;
foreach (@tables)
{
    chomp($_);
    system("pg_dump -Fp -t $_ -f $_.dump");
}
0 голосов
/ 27 августа 2011

Если ваши таблицы организованы в различные схемы, то, возможно, вам подойдет следующее:

#!/usr/bin/env perl

use strict;
use warnings;

my $database_name = 'book_library';

my $query = <<"EOT";
SELECT  n.nspname as table_schema,
        c.relname as table_name
    FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
    WHERE c.relkind IN ('r','')
        AND n.nspname NOT IN ('pg_catalog', 'information_schema')
        AND n.nspname NOT LIKE '^pg_%'
    ;
EOT

$query =~ s/\n\s*/ /g;

my @results = `echo  "$query" | psql -At $database_name`;
foreach (@results) {
    chomp;
    my ($schema, $table) = split /\|/, $_;
    next unless ($schema && $table);
    my $cmd = "pg_dump -U postgres -Fp -t $schema.$table -f $schema.$table.dump $database_name";
    system($cmd);
}

Обратите внимание, что вам нужно будет правильно установить переменную $ database_name, и есть предположение, чтоиспользуете файл .pgpass.

0 голосов
/ 27 августа 2011

pg_dumpall - инструмент для выгрузки всего вашего дБ

http://www.postgresql.org/files/documentation/books/aw_pgsql/node265.html

...