Этот сценарий будет генерировать DDL команды отказаться от них всех:
SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM pg_class t
-- JOIN pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE t.relkind = 'r'
AND t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER BY 1;
Актерский t.oid::regclass
делает синтаксическую работу для смешанных идентификаторов случаев, зарезервированные слов или специальных символов в именах таблиц, тоже. Он также предотвращает внедрение SQL и при необходимости добавляет имя схемы. Подробнее о object identifier types in the manual.
About the schema search path.
Вы можете автоматизировать капания, тоже, но это неразумно не проверить то, что вы на самом деле удалить, прежде чем делать.
Вы можете добавить CASCADE
к каждому утверждению для объектов, зависящих от DROP (представления и ссылки на внешние ключи). Но, опять же, это неразумный, если вы не очень хорошо знаете, что делаете. Ограничения внешнего ключа не являются большими потерями, но это также полностью отключит все зависимые взгляды. Без CASCADE
вы получаете сообщения об ошибках, сообщающие вам, какие объекты не позволяют вам отбрасывать таблицу. И тогда вы сможете справиться с этим.
Это загруженный лап. Если вы не присваиваете схему именам таблиц, вы можете потерять неверную таблицу - в зависимости от вашего 'search_path'. (Среди других проблем с этим.) Используйте это только в том случае, если вы знаете, что делаете! –
Вы когда-нибудь запускали команды 'DROP TABLE', не зная, что вы делаете? –
Никогда. Вы абсолютно правы. То, что вам может не хватать: даже если вы сузите поиск по одной схеме, как и в вашем ответе, схема может не находиться в текущем 'search_path' или другая схема может на первом месте и содержать таблицу с тем же именем. Вы можете удалить ** неправильный ** стол и никогда не знать этого, пока не стало слишком поздно. Вот почему я называю это загруженным ножом. –