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
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.
LINE 2
? Co ' s na řádku 1?