sql >> Database >  >> RDS >> PostgreSQL

Hoe kun je veel (maar niet alle) tafels in één klap laten vallen?

Allereerst kun je veel tabellen in een enkele verklaring :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

Vervolgens zou je al die tabellen in een apart schema kunnen plaatsen . Voeg dat schema toe aan de standaard search_path van uw gebruiker(s), dus het is allemaal transparant.

Dan is alles wat je nodig hebt:

DROP SCHEMA foo CASCADE;

Als dat niet kort genoeg is, maak dan een functie die de opdracht uitvoert.
Een statische SQL-functie :

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;

Of een dynamische PL/pgSQL-functie :

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;

Bel:

SELECT f_delete12();

Voor een nog dynamischer statement:
Hoe verwijder ik alle tabellen in psql (PostgreSQL interactieve terminal) die beginnen met een gewoon woord?



  1. Verschillende coderingsresultaten krijgen tussen C#.Net en Oracle

  2. Resamplen op tijdreeksgegevens

  3. PDO UTF-8-coderingsprobleem?

  4. Een Like-functie maken php mysql ajax