postgres como eliminar todas as tabelas de um esquema por meio do comando

Eu uso o postgresql e preciso eliminar todas as tabelas que estão presentes no esquema. Como posso excluir do prompt de comando.

Resposta

Você deseja usar a CASCADE opção de DROP SCHEMA. Da documentação :

CASCADE – Exclua automaticamente os objetos (tabelas, funções etc.) contidos no esquema, e, por sua vez, todos os objetos que dependem desses objetos

TENHA CUIDADO – ênfase acima da minha.

Obviamente, você precisará recriar o esquema depois.

Para apenas eliminar todas as tabelas do 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 $$; 

Alterar WHERE schemaname = current_schema() se você quiser descartar todas as tabelas em um esquema diferente.

Comentários

  • quando eu uso DROP SCHEMA schemaname CASCADE; estou conseguindo erro ERROR: erro de sintaxe em ou próximo a " DROP " LINHA 2: Esquema DROP
  • LINE 2? Quais ' s na linha 1?
  • na verdade, eu preciso descartar todos os impostos bles e seu objeto dependente. mas não deve excluir o procedimento e tudo.
  • mas quando eu uso o comando drop schema, ele exclui o esquema também. no meu caso, o esquema deve existir
  • @asalthangam resposta atualizada

Resposta

yourdb=# DROP SCHEMA *schema_name* CASCADE; 

(funciona, apenas testado com Postgresql 9.6.3, pode não funcionar com versões anteriores)

Resposta

@Techno Savvy

Elimine tabelas usando a sintaxe 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.

Comentários

  • A questão era sobre descartar tabelas em um esquema específico, eu acho.

Resposta

Se você deseja apenas uma maneira realmente simples de fazer isso … Aqui está um script que usei no passado

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

Isso imprimirá uma série de comandos de remoção para todas as tabelas no esquema. Faça o spool do resultado desta consulta e execute-o.

Da mesma forma, se quiser limpar mais do que tabelas, você pode 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

Comentários

  • A questão é Postgres, não Oracle.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *