PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment supprimer plusieurs tables (mais pas toutes) d'un seul coup ?

Tout d'abord, vous pouvez supprimer plusieurs tables en une seule déclaration :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

Ensuite, vous pouvez placer toutes ces tables dans un schéma distinct . Ajoutez ce schéma à la valeur par défaut search_path de vos utilisateurs, donc tout est transparent.

Alors tout ce dont vous avez besoin est :

DROP SCHEMA foo CASCADE;

Si ce n'est pas assez court, créez une fonction qui exécute la commande.
Une fonction SQL statique :

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;

Ou une fonction PL/pgSQL dynamique :

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;

Appel :

SELECT f_delete12();

Pour une déclaration encore plus dynamique :
Comment puis-je supprimer toutes les tables dans psql (terminal interactif PostgreSQL) qui commence par un mot commun ?