giovedì 7 gennaio 2010

Query per eliminare gli oggetti di un utente

Usando il catalogo di sistema è possibile ottenere l'elenco degli oggetti di un determinato utente nel sistema (e nello schema), e da queste è possibile costruire le query da eseguire (una ad una) per eliminare tali oggetti:

SELECT 'DROP ' || case when relkind ='r' THEN 'TABLE' WHEN relkind='S' THEN 'SEQUENCE' WHEN relkind='v' THEN 'VIEW' END || ' ' || relname || ' CASCADE;' FROM pg_class JOIN pg_authid ON pg_class.relowner = pg_authid.oid WHERE rolname='luca';


La query riportata qui sopra elenca tutti gli oggetti di proprietà dell'utente luca e provvede a creare automaticamente delle query del tipo DROP per i vari elementi. Da notare che viene automaticamente riconosciuto, tramite l'attritubo pg_class.relkind il tipo di un oggetto, e quindi vengono generate query DROP TABLE come DROP SEQUENCE e DROP VIEW. Ovviamente è possibile estendere la query per ottenere l'eliminazione di altri tipi di oggetti.

E' sufficiente redirigere l'output di questa query verso un file di testo per poi procedere all'eliminazione di tutte le tabelle/oggetti selezionati.

Nessun commento: