postgres como descartar toda a tabela em um esquema através do comando


10

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

Respostas:


17

Você deseja usar a CASCADEopçã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.


quando eu uso o esquema DROP SCHEMA; CASCADE; estou recebendo erro ERRO: erro de sintaxe na linha "DROP" ou próximo a ela: LINHA 2: Esquema DROP
asalthangam

2
LINE 2? O que está na linha 1?
Philᵀᴹ

Na verdade, eu preciso soltar todas as tabelas e seu objeto dependente. mas deve procedimento não exclusão e todos ..
asalthangam

mas quando eu uso o comando drop schema, ele exclui o esquema também. no meu caso, o esquema deve existir
asalthangam

@asalthangam resposta atualizada
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

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


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.


A pergunta era sobre a eliminação de tabelas em um esquema específico, eu acho.
mustaccio

-2

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


3
A questão é o Postgres, não o Oracle.
Philᵀᴹ
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.