как получить список баз данных (не баян)

Люди пишу скрипт резервного копирования баз данных на bash. Надо чтобы этот скрипт сам брал список баз данных и все бекапил.
ПРОБЛЕМА:
Название базы данных может содержать любые символы и перевод строки и пробел и т.п., как сделать в этом случае цикл перебора всех баз данных???

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Во-первых, есть pg_dumpall

Во-первых, есть pg_dumpall который бакапит все базы данных без всяких скриптов.
Во-вторых, в psql есть команда которая показывает все базы, скормите ей эту команду на stdin и проанализируйте результаты в bash

за pg_dumpall спасибо - не

за pg_dumpall спасибо - не знал :)

1) pg_dumpall - не подходит,

1) pg_dumpall - не подходит, так как требуется иметь возможность восстановить базы отдельно, а с pg_dumpall, как я понял, восстановить можно только все

2) если я например создал базу с неудобоваримым именем

она создается нормально,
команда:
psql -A -q -t -U postgres -c "select datname from pg_database" template1

выдает:

template1
template0
postgres
mydb
PT3 DB
mydb1 /n //,,,oiuou

но вот скрипт:
for DataBaseName in $(psql -U postgres -t -A -q -c "select datname from pg_database");
do
echo $DataBaseName

done

выдаст:
template1
template0
postgres
mydb
PT3
DB
mydb1
/n
//,,,oiuou

Это только пример с пробелами, а мне позавчера (не помню как) удалось создать базу с именем включающем в себя перевод строки и Т.П. (удалил эту базу через такую то мать только через PGAdmin)

Цель: Создать автономный скрипт резервных копий с ротацией и оповещениями о проблемах по почте. Почти все написал - осталось только сделать так, чтобы делались резервные копии ВСЕХ баз данных автоматически, так как я не буду отслеживать их создание и удаление - этим будут заниматься другие.

если в названии базы нет

если в названии базы нет перевода строки то работает это (и я о этом знаю)

IFS=$'\n'; for line in `psql -U postgres -t -A -q -c "select datname from pg_database"`; do echo $line; done

Тогда вопрос упрощается:
есть ли инструментарий, который может перебрать все базы данных и для каждой выполнить скрипт в который передать имя базы данных?

Если нет то сойдет и ограничение что в имени базы не должно быть перевода строки - я это увижу при выполнении резервной копии - так как придет ошибка, что базы такой нет и я надаю по суслам господам разработчикам, но если есть возможность предусмотреть и перевод строки в имени базы то будет хорошо.

А кто мешает развернуть

А кто мешает развернуть полный бакап сделанный pg_dumpall на другом сервер и затем уже забрать нужную вам базу оттуда? Долго? может быть, но ведь и базы вам не каждый день восстанавливать.

Просто копируя базы по отдельности вы упускаете права доступа - юзвери хранятся в системной БД

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023