Først og fremmest kan du slette mange tabeller i en enkelt erklæring :
DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;
Dernæst kan du placere alle disse tabeller i et separat skema . Føj det skema til standard search_path
af dine brugere, så det hele er gennemsigtigt.
Så behøver du bare:
DROP SCHEMA foo CASCADE;
Hvis det ikke er kort nok, skal du oprette en funktion, der udfører kommandoen.
En statisk 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;
Eller en dynamisk 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;
Ring til:
SELECT f_delete12();
For en endnu mere dynamisk erklæring:
Hvordan slipper jeg alle tabeller i psql (PostgreSQL interaktiv terminal), der starter med et almindeligt ord?