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

Hvordan dropper jeg alle tabeller i psql (PostgreSQL interaktiv terminal), der starter med et almindeligt ord?

Dette script vil generere DDL-kommandoer for at slette dem alle:

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;

Castet t.oid::regclass får syntaksen til at fungere for blandede store og små bogstaver, reserverede ord eller specialtegn i tabelnavne. Det forhindrer også SQL-injektion og sætter skemanavnet foran, hvor det er nødvendigt. Mere om objektidentifikatortyper i manualen .

Om skemasøgestien.

Du kan også automatisere bortfaldet, men det er uklogt ikke at tjekke, hvad du faktisk sletter, før du gør det.

Du kan tilføje CASCADE til hver erklæring til DROP afhængige objekter (visninger og henvisninger til fremmednøgler). Men igen, det er uklogt medmindre du godt ved, hvad du laver. Udenlandske nøglebegrænsninger er ikke noget stort tab, men dette vil også droppe alle afhængige synspunkter helt. Uden CASCADE du får fejlmeddelelser, der informerer dig om, hvilke objekter der forhindrer dig i at tabe bordet. Og så kan du håndtere det.



  1. Hvordan kontrollerer man den endelige SQL-parametriserede forespørgsel i PHP med PDO?

  2. Værktøjer til at generere et databasediagram/ER-diagram fra eksisterende Oracle-database?

  3. MySql fuldtekstsøgning

  4. Hvilken er hurtigst? VÆLG SQL_CALC_FOUND_ROWS FRA `tabel`, eller VÆLG COUNT(*)