Cancellare tutte le tabelle di uno schema PostgreSQL in un sol colpo
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 !!!