DROP TABLE - Amazon Redshift

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;