sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo eliminar muchas (pero no todas) mesas de una sola vez?

En primer lugar, puede eliminar muchas tablas en un solo declaración :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

A continuación, podría poner todas esas tablas en un esquema separado . Agregue ese esquema al predeterminado search_path de su(s) usuario(s), por lo que todo es transparente.

Entonces todo lo que necesitas es:

DROP SCHEMA foo CASCADE;

Si eso no es lo suficientemente breve, cree una función que ejecute el comando.
Una función SQL estática :

CREATE OR REPLACE FUNCTION f_delete12()  RETURNS void AS
$func$
DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3, ... CASCADE;
$func$  LANGUAGE sql VOLATILE;

O una función PL/pgSQL dinámica :

CREATE OR REPLACE FUNCTION f_delete12()
  RETURNS void AS
$func$
BEGIN
EXECUTE (
   SELECT 'DROP TABLE ' || string_agg('mystuff_table_' || g, ', ')
          || ' CASCADE'
   FROM generate_series(1,12) g  -- numbers 1 to 12
   );
END
$func$  LANGUAGE plpgsql VOLATILE;

Llamar:

SELECT f_delete12();

Para una declaración aún más dinámica:
¿Cómo elimino todas las tablas en psql (terminal interactivo de PostgreSQL) que comienzan con una palabra común?