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

4
user511345 27 Авг 2011 в 00:36

3 ответа

Лучший ответ

Если я правильно понимаю ваш вопрос, то следующего сценария 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");
}
2
Grzegorz Szpetkowski 26 Авг 2011 в 22:05

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

#!/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
gsiems 27 Авг 2011 в 17:23

Pg_dumpall - это инструмент для дампа всей вашей базы данных

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

-3
Ketema 26 Авг 2011 в 23:35