ho sempre sentito molto più confortevole la creazione di uno script SQL Posso rivedere e testare prima di eseguirlo piuttosto che fare affidamento sul fatto che il plpgsql sia corretto, in modo da non spazzare via il mio database. Qualcosa di semplice in bash che seleziona il nome della tabella dal catalogo, quindi crea le istruzioni di rilascio per me. Quindi per 8.4.x otterresti questa query di base:
SELECT 'drop table '||n.nspname ||'.'|| c.relname||';' as "Name"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','v','S','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid);
A cui è possibile aggiungere una clausola where. (Dove c.relname ilike 'Bubba%')
uscita si presenta così:
Name
-----------------------
drop table public.a1;
drop table public.a2;
Quindi, salvo che in un file sql ed eseguirlo con psql -f filename.sql
fonte
2010-11-17 17:53:39
Grazie per aver risposto! Un elenco separato da virgole è ottimo per eliminare un piccolo elenco di tabelle. Tuttavia, non è pratico per far cadere 20 tabelle contemporaneamente (o più). Riformulerò la domanda per essere più chiara. –
Siamo spiacenti, questa è l'unica opzione che hai. Potresti costruire una funzione memorizzata per questo, ma ci sono buone possibilità che ti sparerai ai piedi: far cadere troppi tavoli ... –
Funzione aggiunta, buon divertimento! E fai attenzione, questo potrebbe distruggere l'intero database. –