postgres hoe alle tabellen in een schema te verwijderen met het commando

Ik gebruik postgresql en ik moet alle tabellen die in het schema aanwezig zijn verwijderen. Hoe kan ik verwijderen vanaf de opdrachtprompt.

Antwoord

U wilt de CASCADE optie van DROP SCHEMA. Van de documentatie :

CASCADE – Verwijder automatisch objecten (tabellen, functies, etc.) die zijn opgenomen in het schema, en op hun beurt alle objecten die afhankelijk zijn van die objecten

VOORZICHTIG – nadruk boven de mijne.

Het is duidelijk dat u het schema daarna opnieuw moet maken.

Om alle tabellen in het huidige schema te verwijderen, kunt u dit script gebruiken:

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 $$; 

Wijzigen WHERE schemaname = current_schema() als u alle tabellen in een ander schema wilt verwijderen.

Opmerkingen

  • wanneer ik DROP SCHEMA gebruik, schemanaam CASCADE; krijg fout FOUT: syntaxisfout op of nabij " DROP " LIJN 2: DROP-schema
  • LINE 2? Welke ' s op regel 1?
  • eigenlijk moet ik alle ta bles en zijn afhankelijke object. maar het zou de procedure en alle niet moeten verwijderen.
  • maar wanneer ik het commando drop schema gebruik, verwijdert het ook het schema. in mijn geval zou het schema moeten bestaan
  • @asalthangam antwoord bijgewerkt

Antwoord

yourdb=# DROP SCHEMA *schema_name* CASCADE; 

(werkt, zojuist getest met Postgresql 9.6.3, werkt mogelijk niet met eerdere releases)

Antwoord

@Techno Savvy

Zet tabellen neer met behulp van de postgres-syntaxis:

select "-- drop table " || tablename || " cascade;" from pg_tables where tablename not like "pg%" and tablename not like "sql%"; 

Kopieer de resulterende tekst naar een SQL-script of psql-terminal. Merk op dat de commandos becommentarieerd zijn.

Opmerkingen

  • De vraag ging over het laten vallen van tabellen in een specifiek schema, denk ik.

Antwoord

Als je gewoon een heel eenvoudige manier wilt om dit te doen .. Dit is een script dat ik in het verleden heb gebruikt

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

Dit zal een reeks drop-commandos afdrukken voor alle tabellen in het schema. Spool het resultaat van deze query en voer het uit.

Evenzo, als u meer dan tabellen wilt wissen, kunt u het volgende naar wens bewerken

select "drop "||object_type||" "|| object_name || ";" from user_objects where object_type in ("VIEW","PACKAGE","SEQUENCE", "PROCEDURE", "FUNCTION", "INDEX") 

Bron: https://forums.oracle.com/forums/thread.jspa?threadID=614090

Reacties

  • De vraag is Postgres, niet Oracle.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *