Przede wszystkim możesz usunąć wiele tabel w jednym oświadczenie :
DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;
Następnie możesz umieścić wszystkie te tabele w osobnym schemacie . Dodaj ten schemat do domyślnego search_path
użytkowników, więc wszystko jest przejrzyste.
Wszystko czego potrzebujesz to:
DROP SCHEMA foo CASCADE;
Jeśli to nie wystarczy, utwórz funkcję, która wykonuje polecenie.
Statyczna funkcja SQL :
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;
Lub dynamiczna funkcja PL/pgSQL :
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;
Zadzwoń:
SELECT f_delete12();
Aby uzyskać jeszcze bardziej dynamiczną wypowiedź:
Jak usunąć wszystkie tabele w psql (interaktywny terminal PostgreSQL), które zaczynają się od wspólnego słowa?