Eu uso o postgresql e preciso eliminar todas as tabelas que estão presentes no esquema. Como posso excluir do prompt de comando.
Eu uso o postgresql e preciso eliminar todas as tabelas que estão presentes no esquema. Como posso excluir do prompt de comando.
Respostas:
Você deseja usar a CASCADE
opção de DROP SCHEMA
. A partir da documentação :
CASCADE
- Solte automaticamente objetos (tabelas, funções, etc.) contidos no esquema e , por sua vez, todos os objetos que dependem desses objetos
CUIDADO - ênfase acima da minha.
Obviamente, você precisará recriar o esquema posteriormente.
Para simplesmente soltar todas as tabelas no esquema atual, você pode usar este 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 $$;
Altere WHERE schemaname = current_schema()
se você deseja eliminar todas as tabelas em um esquema diferente.
LINE 2
? O que está na linha 1?
@Techno Savvy
Solte tabelas usando a sintaxe do postgres:
select '-- drop table ' || tablename || ' cascade;' from pg_tables
where tablename not like 'pg%' and tablename not like 'sql%';
Copie o texto resultante em um script sql ou terminal psql. Observe que os comandos estão comentados.
Se você quer apenas uma maneira realmente simples de fazer isso ... Heres um script que eu usei no passado
select 'drop table '||table_name||' cascade constraints;' from user_tables;
Isso imprimirá uma série de comandos de descarte para todas as tabelas no esquema. Spool o resultado desta consulta e execute-o.
Da mesma forma, se você quiser limpar mais do que tabelas, poderá editar o seguinte para atender às suas necessidades
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