sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan taber man mange (men ikke alle) borde i ét hug?

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?



  1. Heroku Connect med Cakephp v3.0.12

  2. Brug af SQL Server Integration Services (SSIS) til at udfylde QuickBooks Records

  3. Internaler i de syv SQL Server-sorteringer – Del 1

  4. Flere array_agg()-kald i en enkelt forespørgsel