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

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

Risposta

Vuoi utilizzare CASCADE opzione di DROP SCHEMA. Dalla documentazione :

CASCADE – Rilascia automaticamente gli oggetti (tabelle, funzioni e così via) contenuti nello schema, e a sua volta tutti gli oggetti che dipendono da tali oggetti

ATTENZIONE – enfasi sopra la mia.

Ovviamente dovrai ricreare lo schema in seguito.

Per eliminare tutte le tabelle nello schema corrente, puoi 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 $$; 

Modifica WHERE schemaname = current_schema() se si desidera eliminare tutte le tabelle in uno schema diverso.

Commenti

  • quando si usa DROP SCHEMA schemaname CASCADE; sto ottenendo errore ERRORE: errore di sintassi in corrispondenza o in prossimità di " DROP " LINEA 2: schema DROP
  • LINE 2? Cosa ' cè sulla riga 1?
  • in realtà ho bisogno di eliminare tutte le ta bles e il suo oggetto dipendente. ma non dovrebbe cancellare la procedura e tutto ..
  • ma quando uso il comando drop schema elimina anche lo schema. nel mio caso dovrebbe esistere lo schema
  • @asalthangam answer updated

Answer

yourdb=# DROP SCHEMA *schema_name* CASCADE; 

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

Risposta

@Techno Savvy

Elimina tabelle utilizzando la sintassi 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 terminale psql. Nota che i comandi sono commentati.

Commenti

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

Risposta

Se vuoi solo un modo molto semplice per farlo .. Ecco uno script che ho usato in passato

select "drop table "||table_name||" cascade constraints;" from user_tables; 

Questo stamperà una serie di comandi di rilascio per tutte le tabelle nello schema. Spool il risultato di questa query ed eseguila.

Allo stesso modo, se desideri cancellare più di tabelle, puoi modificare quanto segue in base alle tue 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

Commenti

  • La domanda è Postgres, non Oracle.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *