Това ще създаде операторите за премахване на споменатите таблици и не други обекти, съответстващи на модела. Също така няма системни таблици.
SELECT 'DROP TABLE ' || c.oid::regclass || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace -- to restrict to a schema
WHERE c.relkind = 'r' -- only tables
AND c.relname ILIKE '%gtab%' -- pattern for table names
AND n.nspname = 'public' -- restrict to a schema
ORDER BY 1;
Прехвърлянето към regclass
автоматично избягва и схематично квалифицира имената на таблиците според нуждите и е безопасен срещу SQL инжектиране. Подробности:
- Името на таблицата като Параметър на функцията PostgreSQL
- Имена на таблици и колони да се дефинират като аргументи във функция plpgsql?
За много таблици един интегриран израз ще бъде по-бърз:
SELECT 'DROP TABLE ' || string_agg(c.oid::regclass::text, ', ') || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND c.relname ILIKE '%gtab%'
AND n.nspname = 'public'
ORDER BY 1;
Резултат:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Свързани отговори:
- Има ли команда postgres за изброяване/изтриване на всички материализирани изгледи?
- Как да изтрия неизползвани последователности?