sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur släpper jag alla tabeller i psql (PostgreSQL interaktiv terminal) som börjar med ett vanligt ord?

Detta skript kommer att generera DDL-kommandon för att släppa dem alla:

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;

Medverkande t.oid::regclass gör att syntaxen fungerar även för identifierare med blandade skiftlägen, reserverade ord eller specialtecken i tabellnamn. Det förhindrar också SQL-injektion och lägger till schemanamnet vid behov. Mer om objektidentifieringstyper i manualen .

Om sökvägen för schemat.

Du kan automatisera borttagningen också, men det är oklokt inte kontrollera vad du faktiskt tar bort innan du gör det.

Du kan lägga till CASCADE till varje uttalande att DROP beroende objekt (vyer och referens till främmande nycklar). Men återigen, det är oklokt om du inte vet mycket väl vad du gör. Utländska nyckelbegränsningar är ingen stor förlust, men detta kommer också att ta bort alla beroende åsikter helt. Utan CASCADE du får felmeddelanden som informerar dig om vilka objekt som hindrar dig från att släppa tabellen. Och du kan sedan ta itu med det.



  1. MySQL CONCAT returnerar NULL om något fält innehåller NULL

  2. Med tanke på två tabeller, välj all data från en tabell och endast den senaste från den andra

  3. Kan ett fält med typen DATE ha ett DEFAULT-värde med CURRENT_TIMESTAMP?

  4. mysql datumformat för ett specifikt land