как удалить все базы данных, кроме нескольких, в postgres

#database #postgresql

#База данных #postgresql

Вопрос:

Я хочу удалить все базы данных, кроме нескольких. Допустим, есть 20 баз данных, и я хочу удалить 18 из них, но сохранить 2, поскольку они являются последними и используются.

Пожалуйста, предложите.

Комментарии:

1. «удалите database имя_базы данных» для ваших удаляемых 18 баз данных..

2. Спасибо за быстрый ответ! Мне нужен один скрипт, в котором я хотел бы упомянуть только имена двух баз данных, которые я хочу сохранить.

3. @пользователь3800715 … и когда вы попытались написать этот скрипт самостоятельно, используя выбранный вами язык сценариев, где вы застряли?

4. @CraigRinger Я не уверен, как написать скрипт для этого запроса. Может кто-нибудь предоставить скрипт для того же, совместимый с postgres?

Ответ №1:

Сначала выполните следующий запрос в терминале psql.

 select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;
  

Это сгенерирует drop database команду для всех баз данных. Скопируйте результат в текстовый редактор и исключите (удалите) то, что вы хотите сохранить, и сохраните это как dd.sql файл. И выполнить это следующим образом:

 psql -d postgres -f dd.sql
  

Комментарии:

1. необязательно: psql -d postgres < <( psql -Atc "select 'drop database "'||datname||'";' from pg_database where datistemplate=false /* AND add_extra_conditions_here */;")

Ответ №2:

В pgAdmin теперь вы можете выбрать свойства базы данных, выбрать базы данных для удаления и нажать удалить / drop. Быстро и просто! Удалить выбранные базы данных: Удалить выбранные базы данных

Ответ №3:

Как показывает принятый ответ, удаление нескольких баз данных было для меня особенно утомительным, поэтому я написал вспомогательный скрипт, чтобы облегчить эту операцию:https://github.com/Kraymer/ezdropdb

Короче говоря, вы вводите шаблон, которому должны соответствовать базы данных, которые вы хотите подавить, затем отображаются результаты по всем именам БД, и появляется последнее приглашение, где вы можете ввести, какие из них следует удалить (см. скриншот на странице проекта) .