ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Удаление нескольких таблиц в PostgreSQL с помощью маски

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам нужно удалить несколько таблиц в PostgreSQL, воспользуйтесь динамической командой DROP TABLE в рамках анонимного блока DO. Для отбора таблиц, соответствующих определённому шаблону, при обращении к pg_tables используйте оператор LIKE.

SQL
Скопировать код
DO
$$
DECLARE
    _tableName TEXT;
BEGIN
    FOR _tableName IN SELECT tablename FROM pg_tables WHERE tablename LIKE 'pattern%'
    LOOP
        -- Подготовка к удалению таблиц.
        EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(_tableName) || ' CASCADE';
    END LOOP;
END;
$$;

Вместо 'pattern%' укажите требуемый шаблон. Команду CASCADE применяйте осмотрительно, поскольку это приведет к удалению всех связанных с таблицей объектов.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Проверьте список таблиц перед удалением

Перед тем как удалить таблицы, убедитесь в точности отбора. Для этого используйте команду RAISE INFO и выведите список таблиц или соберите его отдельно:

SQL
Скопировать код
SELECT tablename 
FROM pg_tables 
WHERE tablename LIKE 'pattern%';

Выделите время, чтобы тщательно проверить полученный список и подтвердить удаление лишь нужных таблиц.

Массовое удаление таблиц: более продвинутые стратегии

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

Избегайте ошибок: генерируйте и проверяйте SQL-запросы

Формируйте SQL-команды отдельно, так вы получите возможность тщательно их проверить до выполнения. Для создания запроса на удаление:

SQL
Скопировать код
SELECT 'DROP TABLE IF EXISTS ' || quote_ident(tablename) || ' CASCADE;' 
FROM pg_tables 
WHERE tablename LIKE 'pattern%';

После проверки выполните скрипт используя psql -f drop_tables.sql.

Выборочная работа с таблицами

Применение условия WHERE в скрипте влияет на конечный результат:

SQL
Скопировать код
SELECT 'DROP TABLE IF EXISTS ' || quote_ident(schemaname) || '.' || quote_ident(tablename) || ' CASCADE;' 
FROM pg_tables 
WHERE schemaname = 'public'
  AND tablename LIKE 'pattern%';

Данный подход позволяет ограничить зону действия лишь таблицами схемы public.

Командная строка и редакторы – ваши помощники

С помощью командной строки psql или текстового редактора vim вы можете преобразовать список названий таблиц в набор команд и выполнить их.

Визуализация

Визуализируйте процесс удаления таблиц как снос зданий:

Markdown
Скопировать код
🏗️ Стройплощадка: [Table_1, Table_2, Wildcard_Tables*, Table_N]

При применении шаблона:

Markdown
Скопировать код
Подкладка взрывчатки 🧨: [Table_1, Table_2, 🧨, Table_N]
Взрыв 💥: Удаляем все таблицы, соответствующие 🧨 (Wildcard_Tables*)

В результате получаем:

Markdown
Скопировать код
Участок после сноса 🏗️: [Table_1, Table_2, Table_N]

Все таблицы, подходящие под шаблон, были удалены!

Лучше перебдеть, чем недобдеть

В PostgreSQL для удаления таблиц нужно проявить максимальную ответственность. Следовательно:

  • Создавайте резервные копии базы данных.
  • Протестируйте скрипт удаления в тестовом окружении.
  • Используйте транзакции с BEGIN и ROLLBACK, чтобы протестировать изменения без какого-либо риска.
  • Отслеживайте журналы и вывод RAISE INFO.

Поддержание порядка после удаления

Проведите работы по освобождению места и обновлению статистики после удаления таблиц. Работайте вместе с командой DBA для соблюдения наилучших практик.

Полезные материалы

  1. PostgreSQL: Documentation: 16: DROP TABLE — Документация по команде DROP TABLE от PostgreSQL.
  2. How can I drop all the tables in a PostgreSQL database? – Stack Overflow — Опыт удаления таблиц, обсуждаемый на Stack Overflow.
  3. PostgreSQL: Documentation: 16: 43.5. Основные операторы — Глубокое погружение в особенности динамического SQL в pl/pgsql.
  4. PostgreSQL: Documentation: 16: 9.7. Сопоставление шаблонов — Детали использования LIKE и регулярных выражений в PostgreSQL.
  5. Psql – PostgreSQL wiki — Больше информации о командах psql.
  6. pgAdmin 4 — pgAdmin 4 8.2 documentation — Обзор инструмента для управления PostgreSQL — pgAdmin.