Cancellare tutte le tabelle di uno schema PostgreSQL in un sol colpo




en it

Vi è mai capitato di dover ricaricare un database postgres ma di non avere ne i privilegi di creazione di un database/schema ne quelli per dropparlo ? bhe, oggi e' successo a me . Lo schema in questione aveva 220 tabelle quindi dropparle una a una era inpensabile. Ma con un po' di pazienza sono arrivato a questo :

aggiornare la vostra Debian ( o Debian based ) e, dopo aver aggiunto il repository che tanto avete cercato, di ritrovarvi in una situazione tipo :

W:GPG error: http://ftp.debian-unofficial.org sid Release: The following signatures couldn’t be verified because the public key is not available:NO_PUBKEY 394D199524C52AC3

 
psql -h <nome server> -U <utente> -t -d <database> -c 
"SELECT 'DROP TABLE ' || n.nspname || '.' || c.relname || ' CASCADE;' FROM 
pg_catalog.pg_class AS c LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = 
c.relnamespace WHERE relkind = 'r' AND n.nspname NOT IN ('pg_catalog', 
'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid)" >/tmp/droptables

e quindi

 
psql -h <server> -d <database> -f /tmp/droptables 

Passiamo alla spiegazione.

La prima riga crea, per ogni relazione dello schema 'public', una riga del tipo DROP TABLE public.[nome relazione]; e la accoda al file /tmp/droptables ; il risultato finale e' un file di comandi sql che droppano tutto lo schema public del vostro database. La seconda riga semplicemente lancia la serie di drop .

Happy dropping !!!