DROP TABLE
Elimina una tabla de una base de datos.
Si desea borrar las filas de una tabla sin eliminar la tabla, use el comando DELETE o TRUNCATE.
DROP TABLE elimina las restricciones que existen en la tabla de destino. Puede eliminar varias tablas con un solo comando DROP TABLE.
No se puede ejecutar DROP TABLE con una tabla externa en una transacción (BEGIN … END). Para obtener más información acerca de las transacciones, consulte Aislamiento serializable.
Para encontrar un ejemplo en el que se conceda el privilegio DROP a un grupo, consulte Ejemplos de GRANT.
Privilegios necesarios
Los siguientes privilegios son necesarios para DROP TABLE:
Superusuario
Usuarios con el privilegio DROP TABLE
Propietario de la tabla con el privilegio USAGE en el esquema
Sintaxis
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Parámetros
- IF EXISTS
-
Cláusula que indica que si la tabla especificada no existe, el comando no debe realizar cambios y debe devolver un mensaje en el que se indique que la tabla no existe, en lugar de terminar con un error.
Esta cláusula es útil cuando se realiza scripting, para que el script no produzca un error si DROP TABLE se ejecuta contra una tabla que no existe.
- name
-
Nombre de la tabla que se eliminará.
- CASCADE
-
Cláusula que indica que se deben eliminar automáticamente los objetos que dependen de la tabla, como las vistas.
Para crear una vista que no dependa de otros objetos de base de datos, como vistas y tablas, incluya la cláusula WITH NO SCHEMA BINDING en la definición de la vista. Para obtener más información, consulte CREATE VIEW.
- RESTRICT
-
Cláusula que indica que no se debe eliminar la tabla si tiene objetos dependientes. Esta acción es la predeterminada.
Ejemplos
Eliminar una tabla sin dependencias
En el siguiente ejemplo, se crea y se elimina una tabla denominada FEEDBACK que no tiene dependencias:
create table feedback(a int); drop table feedback;
Si una tabla contiene columnas que se referencian en las vistas o en otras tablas, Amazon Redshift muestra un mensaje similar al siguiente.
Invalid operation: cannot drop table feedback because other objects depend on it
Eliminar dos tablas simultáneamente
El siguiente conjunto de comandos crea una tabla FEEDBACK y una tabla BUYERS y, luego, elimina ambas tablas con un único comando:
create table feedback(a int); create table buyers(a int); drop table feedback, buyers;
Eliminar una tabla con una dependencia
Los siguientes pasos muestran cómo eliminar una tabla denominada FEEDBACK con el comando CASCADE.
Primero, cree una tabla simple denominada FEEDBACK con el comando CREATE TABLE:
create table feedback(a int);
Luego, use el comando CREATE VIEW para crear una vista denominada FEEDBACK_VIEW que dependa de la tabla FEEDBACK:
create view feedback_view as select * from feedback;
En el siguiente ejemplo, se elimina la tabla FEEDBACK y, también, la vista FEEDBACK_VIEW, ya que FEEDBACK_VIEW depende de la tabla FEEDBACK:
drop table feedback cascade;
Ver las dependencias de una tabla
Para devolver las dependencias de la tabla, utilice el siguiente ejemplo. Sustituya my_schema
y my_table
por su propio esquema y tabla.
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
y sus dependencias, use el siguiente ejemplo. En este ejemplo también se devuelven todas las dependencias de la tabla que se ha eliminado.
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 | +------------------+----------------+---------------+--------------+-------------+
Eliminar una tabla con IF EXISTS
En el siguiente ejemplo, se elimina la tabla FEEDBACK, si existe. Si no existe, no se realiza ninguna acción y se devuelve un mensaje:
drop table if exists feedback;