Uso postgresql e devo eliminare tutte le tabelle presenti nello schema. Come posso eliminare dal prompt dei comandi.
Uso postgresql e devo eliminare tutte le tabelle presenti nello schema. Come posso eliminare dal prompt dei comandi.
Risposte:
Vuoi usare l' CASCADE
opzione di DROP SCHEMA
. Dalla documentazione :
CASCADE
- Rilascia automaticamente gli oggetti (tabelle, funzioni, ecc.) Contenuti nello schema e , a loro volta, tutti gli oggetti che dipendono da quegli oggetti
ATTENZIONE: l'enfasi sopra la mia.
Ovviamente dovrai ricreare lo schema in seguito.
Per eliminare tutte le tabelle nello schema corrente, è possibile utilizzare questo script:
DO $$ DECLARE
tabname RECORD;
BEGIN
FOR tabname IN (SELECT tablename
FROM pg_tables
WHERE schemaname = current_schema())
LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;
Modificare WHERE schemaname = current_schema()
se si desidera eliminare tutte le tabelle in uno schema diverso.
LINE 2
? Cosa c'è nella linea 1?
@Techno Savvy
Rilasciare le tabelle usando la sintassi di postgres:
select '-- drop table ' || tablename || ' cascade;' from pg_tables
where tablename not like 'pg%' and tablename not like 'sql%';
Copia il testo risultante in uno script sql o in un terminale psql. Si noti che i comandi sono commentati.
Se vuoi solo un modo davvero semplice per farlo ... Ecco uno script che ho usato in passato
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Ciò stamperà una serie di comandi di rilascio per tutte le tabelle nello schema. Spool il risultato di questa query ed eseguirlo.
Allo stesso modo, se si desidera cancellare più delle tabelle, è possibile modificare quanto segue in base alle proprie esigenze
select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')
Fonte: https://forums.oracle.com/forums/thread.jspa?threadID=614090