Spowoduje to utworzenie instrukcji usuwających wspomniane tabele, a nie inne przedmioty pasujące do wzoru. Również nie ma tabel systemowych.
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;
Rzut na regclass
w razie potrzeby automatycznie wyprowadza i kwalifikuje nazwy tabel według schematu i jest bezpieczny przed wstrzyknięciem SQL. Szczegóły:
- Nazwa tabeli jako Parametr funkcji PostgreSQL
- Czy zdefiniować nazwy tabel i kolumn jako argumenty w funkcji plpgsql?
W przypadku wielu tabel pojedyncza zintegrowana instrukcja będzie szybsza:
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;
Wynik:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Powiązane odpowiedzi:
- Czy istnieje polecenie postgres umożliwiające wyświetlenie/usunięcie wszystkich zmaterializowanych widoków?
- Jak usunąć nieużywane sekwencje?