LINUX.ORG.RU

Как получить список таблиц Postgres, удобный для обработки в bash?


0

1

Доброго времени суток.

Сабж.

$ psql -c "select datname from pg_database where datistemplate is false and datallowconn is true and datname!='postgres';"
    datname
---------------
 table1
 table2
 table3
(3 rows)

Три явно лишние: «datname», "---------------", "(3 rows)". Нужен именно список таблиц, без мусора. Да, написать костыль на perl можно, но лень.

★★★★★

Ответ на: комментарий от Ronnie-A

Тогда результат будет зависеть от версии psql - они могут и сменить оформление.

Лучше уж костыль:

#!/usr/bin/perl

use strict;
use DBI;

my $dbh=DBI->connect("dbi:Pg:dbname=postgres", "postgres", "", {PrintError => 1});
exit 1 if $DBI::err;

my $sth=$dbh->prepare( "select datname from pg_database where datistemplate is false and datallowconn is true and datname!='postgres';" );
my $rv=$sth->execute();

exit 1 if !defined $rv;

while ( my @result = $sth->fetchrow_array() ) {
    print $result[0], "\n";
}

$sth->finish();
$dbh->disconnect();
router ★★★★★
() автор топика
Ответ на: комментарий от Ronnie-A

В любом случае, спасибо за помощь :)

router ★★★★★
() автор топика
Ответ на: комментарий от Deleted

>В таком случае, ИМХО лучше весь скрипт на перле и написать =).

А он весь заключается в вызове pg_dump и gzip, т.е. внешних для перла команд.

router ★★★★★
() автор топика
Ответ на: комментарий от ukr_unix_user

>Добавить "-A" и останется только "(3 rows)"

datname тоже. Но идея интересная, перечитаю man в поисках более молчаливых ключей :)

router ★★★★★
() автор топика
Ответ на: комментарий от ukr_unix_user

Да, так и сделаю. Спасибо!

router ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.