PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a eliminare tutte le tabelle in psql (terminale interattivo PostgreSQL) che iniziano con una parola comune?

Questo script genererà i comandi DDL per eliminarli tutti:

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;

Il cast t.oid::regclass fa funzionare la sintassi anche per identificatori di maiuscole e minuscole miste, parole riservate o caratteri speciali nei nomi delle tabelle. Impedisce inoltre l'iniezione SQL e antepone il nome dello schema ove necessario. Ulteriori informazioni sui tipi di identificatori di oggetto nel manuale .

Informazioni sul percorso di ricerca dello schema.

Potresti anche automatizzare il rilascio, ma non è imprudente non controllare cosa elimini effettivamente prima di farlo.

Puoi aggiungere CASCADE a ogni istruzione per DROP oggetti dipendenti (viste e riferimenti a chiavi esterne). Ma, ancora una volta, è imprudente a meno che tu non sappia molto bene cosa stai facendo. I vincoli della chiave esterna non rappresentano una grande perdita, ma ciò eliminerà completamente anche tutte le viste dipendenti. Senza CASCADE ricevi messaggi di errore che ti informano quali oggetti ti impediscono di eliminare la tabella. E poi puoi affrontarlo.