Как передать значения в команду?

Необходимо периодически удалять все базы кроме системных.
Список нужных баз для удаления получаю
sudo -u postgres psql SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres';

И нужно передать этот список в sudo -u postgres dropdb -f
Можно это собрать в одну команду?
sudo -u postgres dropdb -f   || sudo -u postgres psql SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres';
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
Bash-скрипт наподобие такого (запускать от пользователя postgres). Если нужен однострочник, то вместо цикла for .. in можно использовать xargs

#!/bin/bash
for DBNAME in $( psql -q -c "\t" -c "\a" -c "SELECT datname FROM pg_database WHERE NOT (datistemplate AND datname <> 'postgres');" )
do
    dropdb -f $DBNAME
done


psql -q -c "\t" -c "\a" -c "SELECT datname FROM pg_database WHERE NOT (datistemplate AND datname <> 'postgres');" | xargs -l1 dropdb -f
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Можно, например через foreach
Ответ написан
Комментировать
@alexalexes
Выглядит как кейс для шедулера Postgres.
Можно написать хранимую процедуру на plsql и поставить ее на выполнение в планировщик СУБД.
И не надо ничего из вне вызывать. А если надо вне очереди, то вызывать только хранимку - очень удобно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы