postgres come eliminare tutta la tabella in uno schema tramite il comando


10

Uso postgresql e devo eliminare tutte le tabelle presenti nello schema. Come posso eliminare dal prompt dei comandi.

Risposte:


17

Vuoi usare l' CASCADEopzione 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.


quando uso DROP SCHEMA schemaname CASCADE; sto ricevendo errore ERRORE: errore di sintassi vicino o "DROP" LINEA 2: DROP Schema
asalthangam

2
LINE 2? Cosa c'è nella linea 1?
Philᵀᴹ

in realtà ho bisogno di eliminare tutti i tavoli e il suo oggetto dipendente. ma non dovrebbe cancellare la procedura e tutto ..
asalthangam,

ma quando uso il comando drop schema elimina anche lo schema. nel mio caso dovrebbe esistere uno schema
asalthangam,

@asalthangam risposta aggiornata
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(funziona, appena testato con Postgresql 9.6.3, potrebbe non funzionare con le versioni precedenti)


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.


La domanda riguardava il rilascio di tabelle in uno schema specifico, credo.
Mustaccio,

-2

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


3
La domanda è Postgres, non Oracle.
Philᵀᴹ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.