sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo elimino todas las tablas en psql (terminal interactiva de PostgreSQL) que comienzan con una palabra común?

Este script generará los comandos DDL para descartarlos a todos:

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;

El elenco t.oid::regclass hace que la sintaxis funcione también para identificadores de mayúsculas y minúsculas, palabras reservadas o caracteres especiales en nombres de tablas. También evita la inyección de SQL y antepone el nombre del esquema cuando es necesario. Más sobre tipos de identificadores de objetos en el manual .

Acerca de la ruta de búsqueda de esquemas.

También podrías automatizar la caída, pero es imprudente no comprobar lo que realmente borra antes de hacerlo.

Puede agregar CASCADE a cada declaración para DROP objetos dependientes (vistas y referencias a claves foráneas). Pero, de nuevo, eso es imprudente a menos que sepa muy bien lo que está haciendo. Las restricciones de clave externa no son una gran pérdida, pero esto también eliminará por completo todas las vistas dependientes. Sin CASCADE recibe mensajes de error que le informan qué objetos le impiden dejar caer la mesa. Y luego puedes lidiar con eso.