DESCARTAR TABELA
Remove uma tabela de um banco de dados.
Se você está tentando eliminar as linhas de uma tabela sem remover a tabela, use o comando DELETE ou TRUNCATE.
DROP TABLE elimina restrições que existem na tabela de destino. Várias tabelas podem ser removidas com um único comando DROP TABLE.
DROP TABLE com uma tabela externa não pode ser executado em uma transação (BEGIN … END). Para obter mais informações sobre transações, consulte Isolamento serializável.
Para encontrar um exemplo em que o privilégio DROP é concedido a um grupo, consulte GRANT Exemplos.
Privilégios obrigatórios
A seguir estão os privilégios obrigatórios para DROP TABLE:
Superusuário
Usuários com o privilégio DROP TABLE
Proprietário da tabela com o privilégio USAGE no esquema
Sintaxe
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Parâmetros
- IF EXISTS
-
Cláusula que indica que, se a tabela especificada não existe, o comando não deve fazer alterações e deve retornar uma mensagem informando que a tabela não existe, em vez de encerrar com um erro.
Esta cláusula é útil durante scripting para que o script não falhe se o comando DROP TABLE for executado em uma tabela não existente.
- name
-
Nome da tabela a ser removida.
- CASCADE
-
Cláusula que indica que para eliminar automaticamente os objetos que dependem da tabela, como exibições.
Para criar uma exibição que não dependa de outros objetos de banco de dados, como exibições e tabelas, inclua a cláusula WITH NO SCHEMA BINDING na definição de exibição. Para obter mais informações, consulte CREATE VIEW.
- RESTRICT
-
Cláusula que indica que a tabela não se deve ser removida se contiver objetos que dependam dela. Esta ação é o padrão.
Exemplos
Remover uma tabela sem dependências
O exemplo a seguir cria e remove uma tabela chamada FEEDBACK que não tem dependências:
create table feedback(a int); drop table feedback;
Se uma tabela contém as colunas que estão referidas por exibições ou por outras tabelas, o Amazon Redshift exibe uma mensagem como a seguir.
Invalid operation: cannot drop table feedback because other objects depend on it
Remover duas tabelas simultaneamente
O conjunto de comandos a seguir criar uma tabela FEEDBACK e uma tabela BUYERS. Em seguida, remove ambas as tabelas com um único comando:
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;
Remover uma tabela com uma dependência
As etapas a seguir mostram como remover uma tabela chamada FEEDBACK usando a opção CASCADE.
Primeiro, crie uma tabela simples chamada FEEDBACK usando o comando CREATE TABLE:
create table feedback(a int);
Em seguida, use o comando CREATE VIEW para criar uma exibição chamada FEEDBACK_VIEW dependente da tabela FEEDBACK:
create view feedback_view as select * from feedback;
O exemplo a seguir remove a tabela FEEDBACK e também a exibição FEEDBACK_VIEW, pois FEEDBACK_VIEW depende da tabela FEEDBACK:
drop table feedback cascade;
Visualizar as dependências de uma tabela
Para retornar as dependências da tabela, use o exemplo a seguir. Substitua my_schema
e my_table
pelo esquema e tabela próprios.
SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
Para eliminar my_table
e as dependências, use o exemplo a seguir. O exemplo também retorna todas as dependências da tabela que foi descartada.
DROP TABLE my_table CASCADE; SELECT dependent_ns.nspname as dependent_schema , dependent_view.relname as dependent_view , source_ns.nspname as source_schema , source_table.relname as source_table , pg_attribute.attname as column_name FROM pg_depend JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid AND pg_depend.refobjsubid = pg_attribute.attnum JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace WHERE source_ns.nspname = 'my_schema' AND source_table.relname = 'my_table' AND pg_attribute.attnum > 0 ORDER BY 1,2 LIMIT 10;
+------------------+----------------+---------------+--------------+-------------+ | dependent_schema | dependent_view | source_schema | source_table | column_name | +------------------+----------------+---------------+--------------+-------------+
Remover uma tabela usando IF EXISTS
O exemplo a seguir remove a tabela FEEDBACK se ela existir, ou não faz nada e retorna uma mensagem se o esquema não existir:
drop table if exists feedback;