sql >> Database >  >> RDS >> PostgreSQL

Hoe verwijder ik alle tabellen in psql (PostgreSQL interactieve terminal) die beginnen met een gewoon woord?

Dit script genereert de DDL-commando's om ze allemaal te laten vallen:

SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM   pg_class t
-- JOIN   pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE  t.relkind = 'r'
AND    t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER  BY 1;

De cast t.oid::regclass zorgt ervoor dat de syntaxis ook werkt voor hoofdletters, gereserveerde woorden of speciale tekens in tabelnamen. Het voorkomt ook SQL-injectie en voegt waar nodig de schemanaam toe. Meer over type object-ID's in de handleiding .

Over het schema-zoekpad.

Je zou het droppen ook kunnen automatiseren, maar het is onverstandig niet om te controleren wat u daadwerkelijk verwijdert voordat u dat doet.

Je zou kunnen toevoegen CASCADE naar elke instructie naar DROP-afhankelijke objecten (weergaven en verwijzende externe sleutels). Maar nogmaals, dat is onverstandig tenzij je heel goed weet wat je doet. Foreign key-beperkingen zijn geen groot verlies, maar dit zal ook alle afhankelijke weergaven volledig laten vallen. Zonder CASCADE u krijgt foutmeldingen die u informeren over welke objecten u ervan weerhouden de tafel te laten vallen. En dan kun je ermee omgaan.



  1. MySQL-fout:sleutelspecificatie zonder sleutellengte

  2. Eén externe sleutel met tabel met 2 referenties

  3. MySQL LOAD DATA met multiline data

  4. Verouderde MySql-functies