Esto creará las declaraciones para descartar dichas tablas y no otros objetos que coincidan con el patrón. Tampoco hay tablas de sistema.
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;
El elenco a regclass
escapa automáticamente y califica el esquema de los nombres de las tablas según sea necesario y es seguro contra la inyección de SQL. Detalles:
- Nombre de tabla como Parámetro de función de PostgreSQL
- ¿Definir nombres de tablas y columnas como argumentos en una función plpgsql?
Para muchas tablas, una sola instrucción integrada será más rápida:
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;
Resultado:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Respuestas relacionadas:
- ¿Existe un comando de postgres para listar/eliminar todas las vistas materializadas?
- ¿Cómo eliminar secuencias no utilizadas?