Можно ли передавать значения в командную строку при выполнении команды?

Как можно удалить все базы в postgres, кроме системных (postgres, template), используя список нужных баз, полученный с помощью команды "sudo -u postgres psql SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres'." Можно ли объединить это в одну команду, чтобы выполнить удаление автоматически?
  • 12 февраля 2024 г. 8:28
Ответы на вопрос 2
Да, можно передавать значения в командную строку при выполнении команды. Это обычно делается с помощью аргументов командной строки или считывания из стандартного ввода.

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

```sql
SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres';
```

Чтобы удалить все несистемные базы данных в PostgreSQL, используя список, можно написать скрипт на bash, который будет выполнять эту задачу. Предложенное решение будет работать в среде, где установлен `bash` и `psql`, такой как Linux или macOS:

```bash
#!/bin/bash
# Запустите этот скрипт под пользователем, имеющим соответствующие права, например, postgres или с использованием sudo

# Получаем список баз данных для удаления
DBS_TO_DROP=$(sudo -u postgres psql -t -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname NOT IN ('postgres');")

# Удаляем каждую базу данных из списка
for db in $DBS_TO_DROP; do
  echo "Deleting database $db"
  sudo -u postgres psql -c "DROP DATABASE IF EXISTS \"$db\";"
done
```

Чтобы использовать вышеупомянутый скрипт:

1. Сохраните его в файл, например, `drop_dbs.sh`.
2. Сделайте его исполняемым командой `chmod +x drop_dbs.sh`.
3. Запустите скрипт, используя команду `./drop_dbs.sh`.

Важно отметить, что этот скрипт должен быть запущен под пользователем, который имеет права на удаление баз данных. Если это не пользователь `postgres`, то измените `sudo -u postgres` на правильного пользователя.

Также будьте осторожны с автоматическим удалением баз данных, так как это может привести к потере важных данных. Всегда делайте резервную копию перед массовыми операциями с базами данных.
Можно, например через foreach
Похожие вопросы