PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann man viele (aber nicht alle) Tische auf einen Schlag fallen lassen?

Zunächst einmal können Sie viele Tabellen auf einmal löschen Erklärung :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

Als Nächstes könnten Sie alle diese Tabellen in ein separates Schema einfügen . Fügen Sie dieses Schema zum standardmäßigen search_path Ihrer Benutzer, also ist alles transparent.

Dann brauchen Sie nur noch:

DROP SCHEMA foo CASCADE;

Wenn das nicht kurz genug ist, erstellen Sie eine Funktion, die den Befehl ausführt.
Eine statische SQL-Funktion :

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;

Oder eine dynamische PL/pgSQL-Funktion :

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;

Aufruf:

SELECT f_delete12();

Für eine noch dynamischere Aussage:
Wie lösche ich alle Tabellen in psql (interaktives PostgreSQL-Terminal), die mit einem gemeinsamen Wort beginnen?