Używam postgresql i muszę usunąć wszystkie tabele, które są obecne w schemacie. Jak mogę usunąć z wiersza poleceń.
Odpowiedź
Chcesz użyć CASCADE
opcja DROP SCHEMA
. Z dokumentacji :
CASCADE
– Automatycznie usuwaj obiekty (tabele, funkcje itp.) Zawarte w schemacie, i kolejno wszystkie obiekty zależne od tych obiektów
OSTROŻNIE – nacisk powyżej mój.
Oczywiście później trzeba będzie odtworzyć schemat.
Aby po prostu usunąć wszystkie tabele z bieżącego schematu, możesz użyć tego skryptu:
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 $$;
Zmień WHERE schemaname = current_schema()
jeśli chcesz usunąć wszystkie tabele z innego schematu.
Komentarze
Odpowiedź
yourdb=# DROP SCHEMA *schema_name* CASCADE;
(działa, właśnie przetestowano z Postgresql 9.6.3, może nie działać z poprzednimi wersjami)
Odpowiedź
@Techno Savvy
Usuń tabele używając składni postgres:
select "-- drop table " || tablename || " cascade;" from pg_tables where tablename not like "pg%" and tablename not like "sql%";
Skopiuj wynikowy tekst do skryptu sql lub terminal psql. Zauważ, że polecenia są zakomentowane.
Komentarze
- Chyba chodziło o usuwanie tabel w określonym schemacie.
Odpowiedź
Jeśli potrzebujesz naprawdę prostego sposobu na zrobienie tego .. Oto skrypt, którego używałem w przeszłości
select "drop table "||table_name||" cascade constraints;" from user_tables;
Spowoduje to wydrukowanie serii poleceń drop dla wszystkich tabel w schemacie. Buforuj wynik tego zapytania i wykonaj go.
Podobnie, jeśli chcesz wyczyścić więcej niż tabele, możesz edytować następujące elementy, aby dostosować je do swoich potrzeb.
select "drop "||object_type||" "|| object_name || ";" from user_objects where object_type in ("VIEW","PACKAGE","SEQUENCE", "PROCEDURE", "FUNCTION", "INDEX")
Źródło: https://forums.oracle.com/forums/thread.jspa?threadID=614090
Komentarze
- Pytanie brzmi Postgres, a nie Oracle.
LINE 2
? Co ' jest w linii 1?