sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man hittar och tar bort några tabeller från PostgreSQL-databasen

Detta kommer att skapa satserna för att ta bort nämnda tabeller och inte andra föremål som matchar mönstret. Inte heller några systemtabeller.

SELECT 'DROP TABLE ' || c.oid::regclass || ';'
FROM   pg_class c
JOIN   pg_namespace n ON n.oid = c.relnamespace  -- to restrict to a schema
WHERE  c.relkind = 'r'                           -- only tables
AND    c.relname ILIKE '%gtab%'                  -- pattern for table names
AND    n.nspname = 'public'                      -- restrict to a schema
ORDER  BY 1;

Casten till regclass escapes automatiskt och schemakvalificerar tabellnamn efter behov och är säker mot SQL-injektion. Detaljer:

För många tabeller kommer en enda integrerad sats att vara snabbare:

SELECT 'DROP TABLE ' || string_agg(c.oid::regclass::text, ', ') || ';'
FROM   pg_class c
JOIN   pg_namespace n ON n.oid = c.relnamespace
WHERE  c.relkind = 'r'
AND    c.relname ILIKE '%gtab%'
AND    n.nspname = 'public'
ORDER  BY 1;

Resultat:

DROP TABLE tbl1, tbl2, schema1.tbl3;

Relaterade svar:



  1. Oracle valfritt förhållande

  2. oracle pl/sql resulterar i en sträng

  3. Hur skriver man en fråga för att jämföra aktuellt datum med skapade_at tidsstämplar i databasen?

  4. JDBC VS Hibernate