postgres jak vypustit celou tabulku ve schématu pomocí příkazu

Používám postgresql a musím odhodit všechny tabulky, které jsou ve schématu. Jak mohu odstranit z příkazového řádku.

Odpověď

Chcete použít CASCADE možnost DROP SCHEMA. Z dokumentace :

CASCADE – Automaticky zrušit objekty (tabulky, funkce atd.), Které jsou obsaženy ve schématu, a následně všechny objekty, které na těchto objektech závisí

BUĎTE OPATRNÍ – důraz nad mým.

Je zřejmé, že poté budete muset schéma znovu vytvořit.

Chcete-li pouze zrušit všechny tabulky v aktuálním schématu, můžete použít tento skript:

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

Změnit WHERE schemaname = current_schema() pokud chcete zrušit všechny tabulky v jiném schématu.

Komentáře

  • když používám DROP SCHEMA schemaname CASCADE; dostávám error ERROR: syntax error at or div " DROP " ŘÁDEK 2: Schéma DROP
  • LINE 2? Co ' s na řádku 1?
  • ve skutečnosti musím odhodit vše bles a jeho závislý objekt. ale nemělo by to mazat postup a všechny ..
  • ale když použiji příkaz drop schema, smaže to také schéma. v mém případě by schéma mělo existovat
  • @asalthangam odpověď aktualizována

odpověď

yourdb=# DROP SCHEMA *schema_name* CASCADE; 

(funguje, právě testováno s Postgresql 9.6.3, nemusí fungovat s předchozími verzemi)

Odpovědět

@Techno Savvy

Zrušte tabulky pomocí syntaxe postgres:

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

Zkopírujte výsledný text do skriptu sql nebo terminál psql. Všimněte si, že příkazy jsou komentovány.

Komentáře

  • Myslím, že šlo o zrušení tabulek v konkrétním schématu.

Odpovědět

Pokud chcete opravdu jednoduchý způsob, jak to udělat .. Tady je skript, který jsem použil v minulosti

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

Tím se vytiskne řada příkazů přetažení pro všechny tabulky ve schématu. Spool výsledek tohoto dotazu a provést jej.

Podobně, pokud chcete vymazat více než tabulky, můžete upravit následující podle svých potřeb

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

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

Komentáře

  • Otázkou je Postgres, ne Oracle.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *