sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur släpper man många (men inte alla) bord i ett slag?

Först och främst kan du ta bort många tabeller i en enda uttalande :

DROP TABLE mystuff_table_1, mystuff_table_2, mystuff_table_3 CASCADE;

Därefter kan du lägga alla dessa tabeller i ett separat schema . Lägg till det schemat till standard search_path av dina användare, så allt är transparent.

Då behöver du bara:

DROP SCHEMA foo CASCADE;

Om det inte är tillräckligt kort, skapa en funktion som kör kommandot.
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:

SELECT f_delete12();

För ett ännu mer dynamiskt uttalande:
Hur släpper jag alla tabeller i psql (PostgreSQL interaktiv terminal) som börjar med ett vanligt ord?



  1. Få data mellan två datum på MySQL

  2. Raderar post med lägsta ID

  3. Hoppa över rubrik eller första raden vid import av CSV

  4. MySQL - Om det börjar med ett nummer eller specialtecken