Люди пишу скрипт резервного копирования баз данных на 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 на другом сервер и затем уже забрать нужную вам базу оттуда? Долго? может быть, но ведь и базы вам не каждый день восстанавливать.
Просто копируя базы по отдельности вы упускаете права доступа - юзвери хранятся в системной БД