sql >> Databáze >  >> RDS >> PostgreSQL

Jak zahodit mnoho (ale ne všechny) stoly jedním tahem?

Nejprve můžete smazat mnoho tabulek v jedné prohlášení :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

Dále můžete všechny tyto tabulky umístit do samostatného schématu . Přidejte toto schéma do výchozího search_path vašich uživatelů, takže je vše transparentní.

Pak vše, co potřebujete, je:

DROP SCHEMA foo CASCADE;

Pokud to není dost krátké, vytvořte funkci, která příkaz spustí.
Statická funkce 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;

Nebo dynamická funkce 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;

Volejte:

SELECT f_delete12();

Pro ještě dynamičtější prohlášení:
Jak zruším všechny tabulky v psql (interaktivní terminál PostgreSQL), který začíná běžným slovem?



  1. Oracle rychlejší kontrola překrývání

  2. Jednoduchý mysql dotaz pro kontrolu, zda řádek existuje

  3. Jak mohu zřetězit celé sady výsledků v MySQL?

  4. Co je lepší - mnoho malých stolků nebo jeden velký stůl?