Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
DROP TABLE
Rimuove una tabella da un database.
Se stai tentando di svuotare una tabella di righe, senza rimuovere la tabella, utilizza il comando DELETE o TRUNCATE.
DROP TABLE rimuove i vincoli esistenti sulla tabella di destinazione. È possibile rimuovere più tabelle con un singolo comando DROP TABLE.
Non è possibile eseguire DROP TABLE con una tabella esterna all'interno di una transazione (BEGIN … END). Per ulteriori informazioni sulle transazioni, consultare Isolamento serializzabile.
Per trovare un esempio in cui il privilegio DROP è concesso a un gruppo, consultare GRANT Esempi.
Privilegi richiesti
Di seguito sono riportati i privilegi richiesti per DROP TABLE:
-
Superuser
-
Utenti con il privilegio DROP TABLE
-
Il proprietario della tabella con il privilegio USAGE sullo schema
Sintassi
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Parametri
- IF EXISTS
-
Clausola che indica che se la tabella specificata non esiste, il comando non deve apportare modifiche e deve restituire un messaggio che la tabella non esiste, piuttosto che terminare con un errore.
Questa clausola è utile durante lo scripting, quindi lo script ha esito positivo se DROP TABLE viene eseguito su una tabella inesistente.
- name
-
Nome della tabella da rimuovere.
- CASCADE
-
Clausola che indica di rimuovere automaticamente gli oggetti che dipendono dalla tabella, come le viste.
Per creare una vista che non dipende da altri oggetti del database, come viste e tabelle, includi la clausola WITH NO SCHEMA BINDING nella definizione della vista. Per ulteriori informazioni, consulta CREATE VIEW.
- RESTRICT
-
Clausola che indica di non eliminare la tabella se sono presenti oggetti che dipendono da essa. Questa operazione costituisce l'impostazione predefinita.
Esempi
Rimozione di una tabella senza dipendenze
L'esempio seguente crea e rimuove una tabella denominata FEEDBACK che non ha dipendenze:
create table feedback(a int);
drop table feedback;
Se una tabella contiene colonne a cui fanno riferimento le viste o altre tabelle, Amazon Redshift visualizza un messaggio come il seguente.
Invalid operation: cannot drop table feedback because other objects depend on it
Rimozione simultanea di due tabelle
Il seguente set di comandi crea una tabella FEEDBACK e una tabella BUYERS e quindi elimina entrambe le tabelle con un singolo comando:
create table feedback(a int);
create table buyers(a int);
drop table feedback, buyers;
Rimozione di una tabella con una dipendenza
Le seguenti operazioni mostrano come rimuovere una tabella denominata FEEDBACK utilizzando l'opzione CASCADE.
Innanzitutto, crea una semplice tabella denominata FEEDBACK utilizzando il comando CREATE TABLE:
create table feedback(a int);
Quindi, utilizza il comando CREATE VIEW per creare una vista denominata FEEDBACK_VIEW che si basa sulla tabella FEEDBACK:
create view feedback_view as select * from feedback;
L'esempio seguente rimuove la tabella FEEDBACK e rimuove anche la vista FEEDBACK_VIEW, perché FEEDBACK_VIEW dipende dalla tabella FEEDBACK:
drop table feedback cascade;
Visualizzazione delle dipendenze per una tabella
Per restituire le dipendenze per la tabella, utilizza l'esempio seguente. Sostituisci my_schema
e my_table
con il tuo schema e la tua tabella.
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;
Per eliminare my_table
e le relative dipendenze, utilizzate l'esempio seguente. Questo esempio restituisce anche tutte le dipendenze per la tabella che è stata rilasciata.
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 |
+------------------+----------------+---------------+--------------+-------------+
Rimozione di una tabella utilizzando IF EXISTS
L'esempio seguente rimuove la tabella FEEDBACK se esiste oppure non esegue nulla e restituisce un messaggio se non esiste:
drop table if exists feedback;