Иногда требуется удалить все таблицы в выбранной схеме в базе данных postgresql.
Вы можете сказать - можно удалить сразу всю схему (или еще убойней - всю базу). Но нет, при удалении схемы или базы удалится все остальное, что напрямую не зависит от таблиц. Поэтому просто удалим только таблицы. Для этого нам пригодится следующий запрос, результатом которого будет список запросов на удаление каждой таблицы:
Естественно, вместо
Выполнив все полученные запросы, получаем схему без таблиц. Однако, может возникнуть ситуация, что в схеме остались последовательности (sequences). Получить все запросы на удаление последовательностей можно таким запросом:
Посмотреть все последовательности (на всякий случай) можно с помощью запроса:
И как всегда - при удалении важных данных не забудьте про бэкап.
Вы можете сказать - можно удалить сразу всю схему (или еще убойней - всю базу). Но нет, при удалении схемы или базы удалится все остальное, что напрямую не зависит от таблиц. Поэтому просто удалим только таблицы. Для этого нам пригодится следующий запрос, результатом которого будет список запросов на удаление каждой таблицы:
SELECT 'drop table if exists "' || tablename || '" cascade;' as pg_tbl_drop
FROM pg_tables
WHERE schemaname='public';
Естественно, вместо
schemaname='public'
нужно подставить вашу конкретную схему.Выполнив все полученные запросы, получаем схему без таблиц. Однако, может возникнуть ситуация, что в схеме остались последовательности (sequences). Получить все запросы на удаление последовательностей можно таким запросом:
SELECT 'drop sequence if exists "' || relname || '" cascade;' as pg_sec_drop
FROM pg_class
WHERE relkind = 'S';
Посмотреть все последовательности (на всякий случай) можно с помощью запроса:
SELECT c.relname
FROM pg_class c
WHERE c.relkind = 'S';
И как всегда - при удалении важных данных не забудьте про бэкап.